将安装的程序添加到启动

时间:2019-06-14 10:33:11

标签: registry installer startup

我正在使用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();
        }


    }

0 个答案:

没有答案