Wixフレームワークを使用してインストーラーを作成しました。
ユーザーがソフトウェアを初めてインストールした後、機能をカスタマイズして、次にプログラムを実行するときにレジストリに保存することができます。
これが私が抱えている問題です:
ユーザーの設定は、私のプログラムで必要なようにレジストリに保存されています。ユーザーがプログラムをアンインストールしても、設定は引き続きレジストリに保存されます(これも必要に応じて)。ただし、ユーザーが新しいバージョンのソフトウェアをインストールしようとすると、レジストリ値が消去されます。
インストール時にレジストリ値が消去されないようにするにはどうすればよいですか?
編集:
現在、カスタムアクションスクリプトを実行してレジストリをコピーおよび復元しようとしています。スクリプトのコードは次のとおりです。
<CustomAction Id="SaveCmd" Directory="TempFolder" ExeCommand="[SystemFolder]ccbackup.bat" Execute="deferred" Impersonate="no" />
<CustomAction Id="RestoreCmd" Directory="TempFolder" ExeCommand="[SystemFolder]REG.exe RESTORE HKCU\Software\Company\Program[TempFolder]BkUp.hiv" Execute="deferred" Impersonate="no" />
<InstallExecuteSequence>
<Custom Action="SaveCmd" After="InstallInitialize" />
<Custom Action="RestoreCmd" Before="InstallFinalize" />
</InstallExecuteSequence>
SaveCmdカスタムアクションは、次のようなスクリプト(ccbackup.bat)を実行して、デバッグ情報を取得できるようにします。
REG.exe SAVE HKCU\Software\Company\Program BkUp.hiv /Y
pause
スクリプトccbackup.batが実行され、エラーが発生します。
指定されたレジストリキーまたは値が見つかりませんでした。」
問題は、インストーラーが「管理者」コンテキストで実行されているため、レジストリ内のHKCUがどこにあるかを見つける方法がわからないことです。
私が「管理者」のコンテキストにいるときに、HKCUでアカウント(およびその後の正しいレジストリ)を見つける方法を誰かが知っていますか?
私が試みようとしていた次の戦略は、現在のユーザーのSIDを取得し、HKEY_USERSを検索してレジストリにアクセスすることでした...しかし、これは困難であることが証明されています。