我有一个小型 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。对不起我的英语。
谢谢。
对于像我这样有问题的人,我已经解决了我的问题,那就是我的应用程序需要以管理员身份运行,所以如果我按照上面的方式编码并设置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启动时运行应用程序而无需添加注册表项,这对我有用。
有两种方法可以将程序添加为启动应用程序:
将此应用程序添加到 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 操作系统后启动。
请确保您的应用程序不以管理权限执行。