0

我已经在 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup 中以编程方式创建了我的托盘应用程序的快捷方式。但是当我为任何用户登录时,我的托盘应用程序没有启动。它只是为管理员启动。有人可以告诉我,我花了整整一天的时间来解决这个问题,但无法解决它..

    var startupFolderPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonStartup);
    var shell = new WshShell();
    var shortCutLinkFilePath = string.Format("{0}\\{1}", startupFolderPath, "MyShortcut.lnk");
    var windowsApplicationShortcut = (IWshShortcut)shell.CreateShortcut(shortCutLinkFilePath);
    windowsApplicationShortcut.Description = "Shortcut for My Tray application.";
    windowsApplicationShortcut.WorkingDirectory = assemblyPath;
    windowsApplicationShortcut.TargetPath = executablePath;
    windowsApplicationShortcut.Save();
4

1 回答 1

0

我认为有几种方法可以解决这个问题:

  1. 正如 Harry Johnston 所指出的那样,程序不会从 Startup 文件夹(或类似的“从登录开始”位置)开始提升权限。但是,如果它有一个提升清单,您应该能够通过 shell 执行重新启动它,那么它将提示提升,因为它不再直接来自启动。启动快捷方式可以有一个命令行选项作为快速了解它来自启动的方法,然后使用 ShellExecute() 运行可执行文件的路径,或者使用 ProcessStartInfo.UseShellExecute 设置为 true 的 Process.Start。这应该得到提升代码运行所需的提升提示。警告:我没有尝试过,但我听说它有效。

  2. 服务可以在系统启动时运行提升并启动。你的启动程序可以是非管理员的,并且有一个消息协议来要求服务做事。这对于您只想短时间运行的应用程序来说是多余的,但对于系统监视器类型的应用程序则不然。

于 2015-09-15T18:07:02.607 回答