2017-06-10 117 views
0

我創建的Windows應用程序,我要開始我的應用程序在Windows啓動時 爲我寫在下面安裝程序類代碼。但是當我使用註冊表檢查註冊表我沒有得到註冊表值。和我的應用程序不工作。註冊表啓動不工作的Windows應用程序

 public override void Commit(IDictionary savedState) 
     { 
      base.Commit(savedState); 


      try 
      { 
       RegistryKey add = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); 
       add.SetValue("ToposcreenServer", "\"" + Application.ExecutablePath.ToString() + "\""); 


       RegistryKey key = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{70E25B31-99A9-474C-8990-CE28FBCEAAD1}", RegistryKeyPermissionCheck.Default); 
       if (key != null) 
       { 
        key.SetValue("SystemComponent", 1, RegistryValueKind.DWord); 
        key.Close(); 
       } 
       Directory.SetCurrentDirectory(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)); 
       Process.Start(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\ToposcreenServer.exe"); 
       GLobalclass.WriteLog("Installer Executed"); 
      } 
      catch (Exception ex) 
      { 
       GLobalclass.WriteLog("Installer Error :" + ex.Message); 
      } 
     } 
+0

你的代碼設置兩個註冊表值。他們都沒有設置? – mjwills

+0

運行此代碼時,什麼是寫入日誌(「執行」或「錯誤」)? – mjwills

回答

2

如果這是一個人人都安裝則因爲代碼與系統帳戶憑據運行,而不是在安裝用戶的代碼不會寫的安裝用戶HKCU。

反正你不需要代碼來設置運行的關鍵。轉到IDE中的註冊表視圖,並添加註冊表文件夾以獲取HKCU中的Run鍵。然後用那抹ToposcreenSaver添加項目和[TARGETDIR] my.exe假設你的可執行文件的價值是在應用程序文件夾中的文件系統視圖。如果它需要在UAC系統上提升,它可能無法運行。

(如果這段代碼確實在安裝程序類中,那麼您爲什麼使用Application和ExecuteablePath也是不清楚的,因爲安裝程序類是從msiexec.exe進程調用的一個Dll,完全沒有辦法與任何可執行文件要運行,當然這是要安裝一個可執行文件的名字嗎?)

你並不需要設置SystemComponent在註冊表項。該註冊表項可能不會出現在您的自定義操作運行的時間,你真的應該做的就是打開你的MSI與Orca的文件並添加到ARPSYSTEMCOMPONENT屬性表,給它的1

https://msdn.microsoft.com/en-us/library/windows/desktop/aa367750(v=vs.85).aspx

如果應用程序真的是一個傳統的screensave這可能是做到這一點的最好辦法:

http://www.advancedinstaller.com/user-guide/qa-install-screensaver.html

相關問題