我正在使用Visual Studio安装程序模板创建安装程序。我需要为所有用户添加已安装的程序以启动(我也为所有用户安装了该程序)。
我尝试了很多方法:在“用户的启动”文件夹中添加了主输出的快捷方式。这种方法行不通,因为当我从任务管理器中打开“启动”选项卡时,它在那里但其状态为“禁用”。如何默认启用它?我还尝试了使用单独的程序集替代方法(实际上,我尝试了许多替代方法,例如Install,OnCommited,OnAfterInstall),并在注册表中写入了我的exe的路径,但是它不起作用,替代有效,但注册表写入部分无效。之后,当我做同样的事情时,我创建了一个示例项目,它可以正常工作,它将记录添加到注册表中。我拿起了正在运行的exe,以所有替代方式(一个接一个)启动了它,我得到了什么?没用!但是当我手动启动它时,它可以工作!我没有运行exe,而是尝试启动我在做错什么?如何为所有用户将安装的软件添加到启动中?如果我想让所有用户都能使用它,实际上我需要在HKLM中创建一条记录,对吗?怎么做?是否有人知道有免费的软件来创建安装程序,该安装程序将为所有用户安装并为所有用户添加启动功能?
[RunInstaller(true)]
public class InstallerClass : System.Configuration.Install.Installer
{
public InstallerClass()
: base()
{
}
protected override void OnCommitted(IDictionary savedState)
{
Directory.SetCurrentDirectory(Path.GetDirectoryName
(Assembly.GetExecutingAssembly().Location));
string appPath = Path.GetDirectoryName(
Assembly.GetExecutingAssembly().Location) + $"\\App.WPF.exe";
string exePath = Path.GetDirectoryName(
Assembly.GetExecutingAssembly().Location) + $"\\AddToStartup.exe";
Process.Start(exePath, $"App {appPath}");
base.OnCommitted(savedState);
}
protected override void OnAfterInstall(IDictionary savedState)
{
Directory.SetCurrentDirectory(Path.GetDirectoryName
(Assembly.GetExecutingAssembly().Location));
string appPath = Path.GetDirectoryName(
Assembly.GetExecutingAssembly().Location) + $"\\App.WPF.exe";
string exePath = Path.GetDirectoryName(
Assembly.GetExecutingAssembly().Location) + $"\\App.exe";
Process.Start(exePath, $"App {appPath}");
base.OnAfterInstall(savedState);
}
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
RegistryKey key = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", Microsoft.Win32.RegistryKeyPermissionCheck.ReadWriteSubTree);
key.SetValue("123", "456");
key.Close();
}
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
RegistryKey key = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", Microsoft.Win32.RegistryKeyPermissionCheck.ReadWriteSubTree);
key.SetValue("123", "456");
key.Close();
}
}