相关疑难解决方法(0)

使用Process.Start()以Windows服务中的不同用户身份启动进程

我想定期在Windows服务的指定用户帐户下运行任意.NET exe.

到目前为止,我已经让我的Windows服务运行逻辑来决定目标进程是什么,以及何时运行它.目标进程以下列方式启动:

  1. Windows服务使用"管理员"凭据启动.
  2. 到时候,执行一个中间的.NET进程,其参数详细说明应该启动哪个进程(文件名,用户名,域名,密码).
  3. 此过程创建一个新的System.Diagnostics.Process,将ProcessStartInfo对象与传递给它的参数相关联,然后在进程对象上调用Start().

第一次出现这种情况,目标进程执行罚款,然后正常关闭.然而,每次后续时间,一旦目标进程启动,它就会抛出错误"应用程序无法正常运行(0xc0000142)".重新启动Windows服务将允许进程再次成功运行(第一次执行).

当然,目标是每次都成功执行目标进程.

关于上面的步骤2:要以不同的用户身份运行进程.NET调用win32函数CreateProcessWithLogonW.此函数需要一个窗口句柄来记录指定的用户.由于Windows服务未在交互模式下运行,因此它没有窗口句柄.这个中间过程解决了这个问题,因为它有一个可以传递给目标进程的窗口句柄.

请不要使用psexec或windows任务规划器的建议.我已经接受了我的生活,包括以上述方式解决问题.

.net c# service windows-services process

35
推荐指数
1
解决办法
4万
查看次数

标签 统计

.net ×1

c# ×1

process ×1

service ×1

windows-services ×1