2011-11-07 92 views
1

我已經創建了一個在安裝開始執行以在SOFTWARE \微軟\的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

確保您正在爲x64和x64讀取正確的註冊表項,因爲x64 Windows 7安裝更爲常見。你有沒有確定你的代碼在哪裏失敗?如果沒有...添加調試代碼。 –

回答

1

HKEY_LOCAL_MACHINE是每臺機器的位置,所以你的自定義操作需要管理員權限才能在寫。您可以通過設置deferred with no impersonation來授予這些權限。

的Visual Studio 2010,沒有模擬默認情況下,推遲自定義操作,但老版本沒有。因此,您可能需要編輯Orca的MSI以設置適當的標誌。

另一種解決方法是在HKEY_CURRENT_USER中編寫註冊表項。

+0

奇怪的是,我使用VS2010,在安裝和卸載過程中,我仍然必須使用Orca來處理提升的權限。另一個奇怪的是,把它放在HKEY_LOCAL_MACHINE下不能用在我的Win7機器上,但它適用於Windows 2008 R2。 – ArmenB

相關問題