3

Я мигрирую с Windows XP на Windows 7. Я использую программное обеспечение базы данных (Aginity Workbench), которое позволяет пользователю сохранять общие запросы, называемые "фрагменты кода". Эти фрагменты хранятся в реестре:HKEY_CURRENT_USER\Software\Aginity\NetezzaWorkbench\QueryAnalyzer\CodeSnippets

Записи реестра структурированы следующим образом, где поле "Текст" хранит фактический запрос: XP_example

Часть текста .reg выглядит так:

Редактор реестра Windows, версия 5.00

[HKEY_CURRENT_USER\Software\Aginity\NetezzaWorkbench\QueryAnalyzer\CodeSnippets]

[HKEY_CURRENT_USER\Software\Aginity\NetezzaWorkbench\QueryAnalyzer\CodeSnippets\NZ]

[HKEY_CURRENT_USER\Software\Aginity\NetezzaWorkbench\QueryAnalyzer\CodeSnippets\NZ\1] "Trigger" = "sf" "Text" = "select *

от

предел 1000;

"" CaretPosition "= dword:00000010

[HKEY_CURRENT_USER\Software\Aginity\NetezzaWorkbench\QueryAnalyzer\CodeSnippets\NZ\10] "Trigger" = "rollnode" "Text" = "ВЫБРАТЬ mom.varReportId, mom.nodeId, mom.rollupTypeIdFffect, roll.yffectTypeIdFffectTypeIdGearTypeKTypeId. Мама.VAR, mom.mean FROM Моменты мама, RollupTypeMapping roll ГДЕ mom.businessDate = (выберите businessDate из SysConfig) И roll.businessDate = mom.businessDate И mom.nodeId = 260591 И mom.varReportId = 'DGV_BT_yPy_d_I_D_D_RID_D .rollupTypeId ORDER BY mom.nodeId, roll.rollupTypeId "" CaretPosition "= dword:0000018c

... и из Notepad++, показывая подробности переноса строки:registry_linebreaks

Я попытался перенести фрагменты:

  1. в regedit.exe на XP >> экспорт ветки "Фрагменты кода"
  2. в regexit.exe на W7 >> импортировать .reg файл, который я сохраняю в # 1

В Windows появляется сообщение о том, что реестр был успешно обновлен, и на самом деле я вижу новые записи в реестре. Однако почти во всех новых записях отсутствует критическое поле "Текст". Например, вот важная запись "10" сверху: W7_example

Может кто-нибудь помочь объяснить, как решить эту проблему?

Я заметил ровно одну запись, которая, казалось, содержала текстовое поле и была правильно заполнена в W7. Я понятия не имею, что отличается от этого, или почему Windows будет относиться к этому по-другому. Но это показывает мне рабочий пример, и что импорт должен быть возможным.

Windows XP XP_text

Windows 7 W7_text

2 ответа2

2

Это возврат каретки / новые строки. Импортер реестра не любит импортировать вещи с символами EOL / newlines / CR (даже если вы можете успешно экспортировать их). Вы можете проверить эту теорию, посмотрев раздел .reg, в котором содержится TEXT-файл, импортированный DID (пример TO_CHAR). Держу пари, что в нем нет возврата каретки.

Чтобы обойти это:

  • Экспортируйте нужный раздел реестра (например, «HKEY_CURRENT_USER\MyTest»): reg export HKEY_CURRENT_USER\MyTest Test.reg
  • Затем сохраните ключ в двоичном формате: reg save HKEY_CURRENT_USER\MyTest Test.bin
  • Затем импортируйте .Рег файл (на новом компьютере). reg import Test.reg
  • Затем восстановите бинарную версию с ошибкой: reg restore HKEY_CURRENT_USER\MyTest Test.bin

Вы должны сделать оба, потому что "восстановление" не воссоздает ключи, поэтому вы используете экспортированные / импортированные.Reg файлы для выполнения этой части, а затем восстановить двоичные данные (включая символы новой строки и т.д.) В эти существующие ключи.

Предупреждение: я не проверил это полностью, так как у меня нет XP.

2

Проблема в разрыве строк. Если вы исправите это, он будет успешно импортирован.

Во-первых, у вас пропущены разрывы строк:

[HKEY_CURRENT_USER\Software\Aginity\NetezzaWorkbench\QueryAnalyzer\CodeSnippets\NZ\1] "Trigger"="sf" "Text"="select *

Это должно быть:

[HKEY_CURRENT_USER\Software\Aginity\NetezzaWorkbench\QueryAnalyzer\CodeSnippets\NZ\1] 
"Trigger"="sf" 
"Text"="select *    ...

Во-вторых, у вас есть дополнительные разрывы строк:

"Text"="select *

from

limit 1000;

"

Вы можете захотеть это как фрагмент кода, но согласно этой старой статье на MSDN, пустая строка указывает начало нового пути в реестре. Возможно, у Aginity была какая-то схема для кодирования разрывов строк в этих разделах реестра, которая была потеряна в процессе экспорта; независимо от того, если вы удалите пустые строки, он будет успешно импортирован.

Вот "исправленная" версия файла .reg, который вы разместили:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Aginity\NetezzaWorkbench\QueryAnalyzer\CodeSnippets]

[HKEY_CURRENT_USER\Software\Aginity\NetezzaWorkbench\QueryAnalyzer\CodeSnippets\NZ]

[HKEY_CURRENT_USER\Software\Aginity\NetezzaWorkbench\QueryAnalyzer\CodeSnippets\NZ\1] 
"Trigger"="sf" 
"Text"="select * from limit 1000;" 
"CaretPosition"=dword:00000010

[HKEY_CURRENT_USER\Software\Aginity\NetezzaWorkbench\QueryAnalyzer\CodeSnippets\NZ\10] 
"Trigger"="rollnode" 
"Text"="SELECT mom.varReportId, mom.nodeId, mom.rollupTypeId, roll.riskFactorGroup, roll.effectType, mom.VAR, mom.mean FROM Moments mom, RollupTypeMapping roll WHERE mom.businessDate = (select businessDate from SysConfig) AND roll.businessDate = mom.businessDate AND mom.nodeId = 260591 AND mom.varReportId = 'DGV_BT_1D_CAD' AND roll.rollupTypeId = mom.rollupTypeId ORDER BY mom.nodeId, roll.rollupTypeId" 
"CaretPosition"=dword:0000018c

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .