我创建了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 :(得分:2)
如果这是Everyone安装,那么该代码将不会写入安装用户的HKCU,因为代码是使用系统帐户凭据运行的,而不是安装用户的。
无论如何,您不需要代码来设置Run键。转到IDE中的注册表视图并添加注册表文件夹以获取HKCU中的Run键。然后添加一个带有Nama ToposcreenSaver的项目和值[TARGETDIR] my.exe,假设您的可执行文件位于文件系统视图的应用程序文件夹中。如果它需要在UAC系统上提升,它可能无论如何都不会运行。
(如果这段代码确实在安装程序类中,那么你也不清楚为什么使用Application和ExecuteablePath,因为安装程序类是从msiexec.exe进程调用的Dll,并且与之无关你想要运行的任何可执行文件。当然它是你正在安装的可执行文件的名称?)
您无需在注册表项中设置SystemComponent。在您的自定义操作运行时,该注册表项可能不存在,您应该真正做的是使用Orca打开您的MSI文件并将ARPSYSTEMCOMPONENT添加到Property表中,为其赋值1.
https://msdn.microsoft.com/en-us/library/windows/desktop/aa367750(v=vs.85).aspx
如果应用程序确实是传统的屏幕保护,这可能是最好的方法:
http://www.advancedinstaller.com/user-guide/qa-install-screensaver.html
答案 1 :(得分:0)