2017-06-10 122 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

相关问题