2011-11-07 4 views
1

インストールの開始時に実行され、アプリケーションが起動できるようにSOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Runパスにレジストリキーを作成する関数を作成しましたコンピュータが起動したとき。Visual Studioセットアッププロジェクトと起動パスにアプリケーションを配置する

この機能はXP/2003マシンでは機能しますが、Windows 7では機能しません。インストールアプリケーションWindowsサービスプログラムをインストールしているため、インストール中に権限が自動的に強化されます。だから私は何が間違ってやっているのだろうか?

private void RegisterInStartup(bool isChecked) 
{ 
    try 
    { 
     string t_registeryPath = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"; 

     RegistryKey registryKey = 
      Registry.LocalMachine.OpenSubKey(t_registeryPath, true); 

     if (registryKey == null) 
      registryKey = Registry.LocalMachine.CreateSubKey(t_registeryPath); 

     if (isChecked) 
     { 
      string tgt_dir = Context.Parameters["targetPath"]; 
      if (!Directory.Exists(tgt_dir)) 
       return; 

      string t_exeName = Path.Combine(tgt_dir, "AppTaskbarNotificator.exe"); 
      if (!File.Exists(t_exeName)) 
       return; 

      registryKey.SetValue("AppTaskbar", t_exeName); 
     } 
     else 
     { 
      registryKey.DeleteValue("AppTaskbar"); 
     } 
    } 
    catch (Exception) 
    { 
     return; 
    } 
} 

、それは念頭に置いてアプリケーションのインストーラクラスでオーバーライドされたインストール機能に配置されています。ここでは

機能です。

public override void Install(IDictionary stateSaver) 
{ 
    base.Install(stateSaver); 
    System.Diagnostics.Debugger.Break(); 

    RegisterInStartup(true); 
    StartApp(); 
} 

ありがとうございます。

+0

どこがバグですか? – Otiel

+0

Windows 7にインストールしたときにレジストリエントリが作成されません。 – ArmenB

+0

x86およびx64用の正しいレジストリキーがx64 Windows 7インストールでよく読まれていることを確認してください。あなたのコードがどこで失敗するかを決めましたか?そうでなければ...デバッグコードを追加してください。 –

答えて

1

HKEY_LOCAL_MACHINEはマシンごとの場所なので、カスタムアクションには管理者権限が必要です。 deferred with no impersonationにすることで、これらの特権を与えることができます。

Visual Studio 2010では、既定で偽装を行わずにカスタムアクションを延期しますが、古いバージョンでは偽装は行われません。したがって、適切なフラグを設定するには、MSIをOrcaと編集する必要があります。

もう1つの解決方法は、レジストリエントリをHKEY_CURRENT_USERに書き込むことです。

+0

奇妙なことに、私はVS2010を使用しています。インストールとアンインストール時に昇格された権限に対処するためにOrcaを使用しなければなりませんでした。それ以外の奇妙なことは、HKEY_LOCAL_MACHINEの下に置くことです。私のWin7マシンでは動作しませんが、Windows 2008 R2では動作します。 – ArmenB

関連する問題