0

を設定するアンインストール時にリセットする必要がある値が既に存在する特定のキーの下にレジストリに値を設定したい私のプログラムの古い価値。VSセットアッププロジェクト - カスタムアクションでレジストリ値を設定する(再)私のプログラムのインストール中に

protected override void OnBeforeInstall(IDictionary savedState) { 
     var originalCommand = Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Classes\myKey\Shell\Open\Command", null, ""); 
     Registry.SetValue(@"HKEY_CURRENT_USER\Software\myProgram\OriginalCommand", null, originalCommand); 
     Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Classes\myKey\Shell\Open\Command", null, "new value"); 
     base.OnBeforeInstall(savedState); 
    } 

    protected override void OnAfterRollback(IDictionary savedState) { 
     ResetRegistryEntries(); 
     base.OnAfterRollback(savedState); 
    } 

    protected override void OnAfterUninstall(IDictionary savedState) { 
     ResetRegistryEntries(); 
     base.OnAfterUninstall(savedState); 
    } 

    private void ResetRegistryEntries() { 
     var originalCommand = Registry.GetValue(@"HKEY_CURRENT_USER\Software\myProgram\OriginalCommand", null, ""); 
     Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Classes\myKey\Shell\Open\Command", null, originalCommand); 
    } 

2奇妙なことは、最初の..今があります:私は、Visual Studio経由でインストールする場合(右私のセットアッププロジェクトをクリックしてインストール)すべてが正常に動作します。..私の新しい値Iは、カスタムアクションでこれを解決しようとしました私の "バックアップ"レジストリキーにも古い値が設定されています。すべてをアンインストールすると、必要に応じてリセットされます。しかし、..私は作成された.msiファイルを介してインストールする場合古い値は私のバックアップレジストリキーに設定されていません..しかし、新しい値..と非常にstange事..私はすべてをアンインストール..どこから。

答えて

0

私は完全にイベントのあなたの順序を理解していない、あなたがしたい正確に何が、:

  1. カスタムアクションをインストールする前に、それはないです「BeforeInstall」と呼ばれているにもかかわらず - それは結局ありますファイルがインストールされ、IDEのレジストリエントリがすべて書き込まれます。したがって、IDEのレジストリビューで設定したレジストリエントリはすべて上書きされます。

  2. 「アンインストール後」と同様に誤って名前が付けられました。アンインストールプロセスの初期段階で、(IDEレジストリビューでインストールされた)レジストリ値が削除されるまでにはかなり早いです。

だからあなたの問題は、彼らが作成またはインストールによって上書きされる前に、レジストリの値を保存するために「前にインストール」本物が必要であることかもしれません。 OrcaでMSIファイルを開き、Sequence見出しをクリックして正しい順序でソートし、カスタムアクションがどこに呼び出されているかを確認します(名前はアンダースコアで始まる16進文字列になります)。 RemoveRegistryValuesアクションとWriteRegistryValuesアクション。

関連する問題