Regedit.exeのインポートで「テキスト」フィールドの取得に失敗する


3

Windows XPからWindows 7に移行します。データベースソフトウェア(Aginity Workbench)を使用します。これにより、ユーザーは「コードスニペット」と呼ばれる一般的なクエリを保存できます。これらのスニペットはレジストリに格納されています。 HKEY_CURRENT_USER\Software\Aginity\NetezzaWorkbench\QueryAnalyzer\CodeSnippets

レジストリエントリは次のように構成されています。 "Text"フィールドに実際のクエリが格納されています。 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]   "トリガー" = "sf" "テキスト" = "選択*

から

制限1000。

"" CaretPosition "= dword:00000010

[HKEY_CURRENT_USER \ Software \ Aginity \ NetezzaWorkbench \ QueryAnalyzer \ CodeSnippets \ NZ \ 10]   "トリガー" = "ロールノード" "テキスト" = "SELECT mom.varReportId、mom.nodeId、   mom.rollupTypeId、roll.riskFactorGroup、roll.effectType、mom.VAR、   mom.mean FROM Momentsママ、RollupTypeマッピングロールWHERE   mom.businessDate =(SysConfigからbusinessDateを選択します)AND   roll.businessDate = mom.businessDate AND mom.nodeId = 260591 AND   mom.varReportId = 'DGV_BT_1D_CAD' AND roll.rollupTypeId =   "mom.rollupTypeIdの順序mom.nodeId、roll.rollupTypeId"   "キャレットポジション" = dword:0000018c

...とメモ帳++から、改行の詳細を表示します。 registry_linebreaks

私は以下の方法でスニペットを移行しようとしました。

  1. XPのregedit.exeの場合>> "コードスニペット"ブランチをエクスポートする
  2. W7のregexit.exeの場合>> #1に保存した.regファイルをインポートします。

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

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

Textフィールドを含んでいるように見え、W7では正しく取り込まれたレコードが1つだけありました。私はこれについて何が違うのか、またはなぜWindowsがそれを別様に扱うのかわかりません。しかし、それは私に実用的な例を示しています、そして輸入は可能であるべきです。

Windows XP XP_text

Windows 7 W7_text


2
質問を編集して、インポートしようとしている.REGファイルの生のテキストを含めてください。
Ƭᴇcʜιᴇ007

@Ƭᴇcʜιᴇ007フィードバックいただきありがとうございます - 私は抜粋を追加しました
Roberto

回答:


2

それは改行です。レジストリインポーターは、EOL / newlines / CR文字を含むものをインポートするのが好きではありません(たとえそれをうまくエクスポートできたとしても)。 DIDがインポートしたTEXTファイル(TO_CHARの例)を保持している.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を利用できないので、これを完全にテストしていません。


感謝 - 私はこれをもっと詳しく見ています。改行を示すスクリーンショットを追加しました。
Roberto

これはやりました。わからない reg あなたが言ったコマンド。私はXPでregedit.exeを2回エクスポートするために使いました( ".reg"と "。"ハイブに)。その後、W7でregedit.exeを使用して2回インポートしました(最初に ".reg"、次に "。"ハイブ)。
Roberto

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

ありがとう、私はこれを試します。私は、Windowsのregedit.exeエクスポートコマンドを使用したので、フォーマットなどに問題はないと考えました。インポートに成功した1つのエントリに改行があったとは思われません。
Roberto

わかりやすくするために CRLF 改行のため?元の記事にスクリーンショットを追加しました。スーパーユーザーに貼り付けても表示されなかったファイルにいくつかの中断があるようです。
Roberto

@ロバートはい、バージョン5のファイルはUnicodeエンコーディングとCRLFの行末を持っています。これを確認するには、エクスポートを見てください。
Reg Edit

再度、感謝します。この方法の限界は、クエリを整理するために望ましい改行をすべて失ったことです。代わりに提案された二進アプローチはこれを避けるように思われた。
Roberto
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.