web-dev-qa-db-ja.com

Regedit.exeインポートは「テキスト」フィールドを取得できません

Windows XPからWindows7に移行しています。データベースソフトウェア(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" = "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

...そしてNotepad ++から、改行の詳細を表示します: registry_linebreaks

次の方法でスニペットを移行しようとしました。

  1. regedit.exeのXP >> export "Code Snippets" branch
  2. w7のregexit.exeで>>#1に保存した.regファイルをインポートします

Windowsは、レジストリが正常に更新されたことを示すメッセージをポップアップします。実際、レジストリに新しいエントリが表示されているのを確認できます。 ただし、ほとんどすべての新しいエントリに重要な「テキスト」フィールドがありません。たとえば、上からの重要なレコード「10」は次のとおりです。 W7_example

誰かがこれを解決する方法を説明するのを手伝ってもらえますか?

テキストフィールドが含まれているように見え、W7で正しく入力されたレコードが1つだけあることに気付きました。これについて何が違うのか、なぜWindowsが違う扱いをするのか私にはわかりません。しかし、それは私に実際の例を示しており、インポートが可能であるはずです。

Windows XPXP_text

Windows 7W7_text

3
Roberto

キャリッジリターン/新ラインです。レジストリインポーターは、EOL /改行/ CR文字を含むものをインポートすることを好みません(正常にエクスポートできたとしても)。 DID import(TO_CHARの例))であるTEXTファイルを保持する.regファイルセクションを調べることで、その理論を確認できます。キャリッジリターンがないことは間違いありません。

それを回避するには:

  • エクスポート必要なレジストリキー(例: "HKEY_CURRENT_USER\MyTest"):reg export HKEY_CURRENT_USER\MyTest Test.reg
  • 次に保存バイナリ形式のキー:reg save HKEY_CURRENT_USER\MyTest Test.bin
  • 次にインポート .Regファイル(新しいコンピューター上)。 reg import Test.reg
  • 次に復元バイナリバージョンのオーバートップ:reg restore HKEY_CURRENT_USER\MyTest Test.bin

「restore」はキーを再作成しないため、両方を実行する必要があります。そのため、エクスポート/インポートされた.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
2
Reg Edit