C# 应用程序在启动时未运行,Windows 10 上的启动影响“未测量”

问题描述 投票:0回答:2

我有一个小型 WPF 应用程序。我正在尝试在 Windows 启动时启动它 我的C#代码如下:

using (RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
                {
                    key.SetValue("MyApp", "\"" + System.Reflection.Assembly.GetExecutingAssembly().Location + "\"");
                    key.Close();
                }

并删除注册表键:

using (RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
            {
                key.DeleteValue("MyApp", false);
                key.Close();
            }

我已经构建了一个可执行文件(MyApp.exe)并安装在我的计算机上。但当 Windows 启动时,该应用程序仍然无法运行。我能怎么做?如何在任务管理器上将“未测量”启动影响更改为其他影响?

我使用的是 Windows 10 x64。对不起我的英语。

谢谢。

c# wpf
2个回答
3
投票

对于像我这样有问题的人,我已经解决了我的问题,那就是我的应用程序需要以管理员身份运行,所以如果我按照上面的方式编码并设置app.manifest

<requestedExecutionLevel level = "requireAdministrator" UIAccess = "false "/>

它不会在 Windows 启动时运行。

为了解决这个问题,我将代码从 CurrentUser 更改为 LocalMachine:

 using (RegistryKey key = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
            {
                key.SetValue("TechTemp", "\"" + System.Reflection.Assembly.GetExecutingAssembly().Location + "\"");
                key.Close();
            }

 using (RegistryKey key = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
            {
                key.DeleteValue("TechTemp", false);
                key.Close();
            }

下一个问题是如何关闭应用程序的UAC(如果您的计算机上启用了UAC),您可以参见here。关于状态影响,即使任务管理器上的状态为“未测量”,您的应用程序仍将在窗口启动时运行。 谢谢拉希德·马利克萨米

更新

您可以阅读here在Windows启动时运行应用程序而无需添加注册表项,这对我有用。


0
投票

有两种方法可以将程序添加为启动应用程序:

将此应用程序添加到 Windows 注册表中的特殊路径,如下所示:

private static void CreateApplicationStartup(string appName, string appPath)
{
    try
    {
        const string softwareMicrosoftWindowsCurrentVersionRun =
            "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";

        using (var registryKey =
               Registry.CurrentUser.OpenSubKey(softwareMicrosoftWindowsCurrentVersionRun, true))
        {
            if (registryKey == null)
                throw new Exception("Startup registry key not found.");

            registryKey.SetValue(appName, appPath);
        }
    }
    catch
    {
        // ignore
    }
}

将程序的快捷方式添加到Windows的启动文件夹中,如下所示:

private static void CreateShortcut(string shortcutName, string shortcutPath, string targetFileLocation)
{
    var shortcutLocation = Path.Combine(shortcutPath, shortcutName + ".lnk");
    var shell = new WshShell();
    var shortcut = (IWshShortcut)shell.CreateShortcut(shortcutLocation);

    shortcut.Description = ApplicationName;
    shortcut.IconLocation = PathManager.Icon;
    shortcut.TargetPath = targetFileLocation;
    shortcut.Save();
}

实施其中一种方法后,您的应用程序将在启动 Windows 操作系统后启动。

请确保您的应用程序不以管理权限执行。

© www.soinside.com 2019 - 2024. All rights reserved.