【问题标题】:How to start a process from a Windows Service如何从 Windows 服务启动进程
【发布时间】:2012-03-14 22:33:49
【问题描述】:

我正在开发我自己的反脚本恶意软件扫描程序 (SharpDefender),它当然需要管理员来处理某些内容。我一直在互联网上搜索如何以管理员身份启动它而不会干扰用户的 UAC,结果出现了 Windows 服务。所以在那之后我想为我的应用程序创建一个 Windows 服务,但它似乎无法启动我的程序的 .exe。我已经检查了服务与桌面交互的选项。

是否有可能从这样的代码开始一个进程:

Process sdef = new Process();
sdef.StartInfo.Filename = locApp + "\\sdefender.exe";
sdef.StartInfo.Arguments = "-hidden";
sdef.Start();

我做错了什么还是有其他方法可以以提升的权限启动可执行文件?

【问题讨论】:

  • 你的代码是怎么失败的?有错误信息吗?

标签: c# process windows-services


【解决方案1】:

我有一个在预定义时间运行应用程序的服务(很像计划任务,但在服务器中运行而不需要记录会话)。

我在 OnStart 方法中调用了一个私有方法 (StartService),它启动了一个新线程 (WorkerFunction)。在那个线程中,我有以下代码来启动应用程序:

Process _proc = Process.Start ( _Program, _Arguments );

希望这会有所帮助。

此致,

何塞·米拉

【讨论】:

    【解决方案2】:

    您可以选择以谁的身份登录您的服务。因此,您应该能够让您的服务在管理员帐户下运行,因此它执行的任何操作都应该已经具有该访问权限。

    Here 是一个链接,讨论在您的代码中执行此操作。或者,像我一样,您可以打开 Services.exe,找到您的进程,右键单击并选择属性,然后进入“登录”选项卡并输入信息。

    【讨论】:

    • 这本来是一个合理的答案,但却是一个不同的问题。您的问题可能对努力使他的 Windows XP 不安全的人有所帮助,但这是在 Microsoft 已将安全漏洞关闭一半之后,在 Vistas 或更新版本上遇到 UAC 问题的人提出的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    相关资源
    最近更新 更多