如何在Windows启动(更新)时运行C#应用程序?

时间:2019-01-31 12:09:09

标签: c# .net registry startup

我想在启动时运行C#应用程序。我使用了这段代码,发现了here

private void SetStartup(bool enable)
    {
        string runKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";

        RegistryKey startupKey = Registry.CurrentUser.OpenSubKey(runKey);

        if (enable)
        {
            if (startupKey.GetValue("ZanNews") == null)
            {
                startupKey.Close();
                startupKey = Registry.CurrentUser.OpenSubKey(runKey, true);
                startupKey.SetValue("ZanNews", "\"" + Application.ExecutablePath + "\"");
                startupKey.Close();
            }
        }
        else
        {
            startupKey = Registry.CurrentUser.OpenSubKey(runKey, true);
            startupKey.DeleteValue("ZanNews", false);
            startupKey.Close();
        }
    }

尽管该条目出现在注册表和任务管理器中,但该程序不是从Windows启动的。

在问这个问题之前,我对StackOverflow进行了先前的研究,没有提出herehere的解决方案和代码段。我得到了安全性和访问错误消息,或者编写了注册表,但是该程序拒绝从操作系统启动。但是,我看到上述问题是在2010年和2011年提出的,并且我认为此后情况发生了变化。

有没有办法让程序在启动时运行?我在Windows 10 April 2018 Update上安装了Windows 10,家庭版,版本1803和.NET Framework 4.7.2。

稍后编辑:其他信息:

  1. Application.ExecutablePath的值为C:\\Users\\alexz\\OneDrive\\Programe\\C#/ZanScore/ZanScore/bin/Debug/ZanNews.exe";
  2. 我尝试删除“#”字符,但是没有运气;
  3. 注册表编辑器的屏幕截图:Screenshot
  4. 任务管理器的屏幕快照(罗马尼亚语):Screenshot

1 个答案:

答案 0 :(得分:0)

做一些研究,发现创建快捷方式并将其放置在Startup文件夹中是一种更好的方法。 here给出了更多详细信息,并且代码(有效且可解决问题)为:

        WshShell wshShell = new WshShell();
        IWshRuntimeLibrary.IWshShortcut shortcut;
        string startUpFolderPath =
          Environment.GetFolderPath(Environment.SpecialFolder.Startup);

        // Create the shortcut
        shortcut =
          (IWshRuntimeLibrary.IWshShortcut)wshShell.CreateShortcut(
            startUpFolderPath + "\\" +
            Application.ProductName + ".lnk");

        shortcut.TargetPath = Application.ExecutablePath;
        shortcut.WorkingDirectory = Application.StartupPath;
        shortcut.Description = "Launch My Application";
        // shortcut.IconLocation = Application.StartupPath + @"\App.ico";
        shortcut.Save();

要使用上述代码,您需要包括IWshRuntimeLibrary命名空间,并向项目添加 Windows脚本宿主对象模型引用。

其他参考是here