相关疑难解决方法(0)

在Windows中:如何在另一个用户上下文下以管理员模式以编程方式启动进程?

脚本

我有一台远程计算机,我想以编程方式运行安装程序(任意可执行文件).这些安装程序需要两件事:

  • 它们必须以管理员模式运行.
  • 它们必须在特定用户上下文下运行(具体而言,是Administrators组成员的本地用户).

事实证明这非常具有挑战性.

看起来好像有一些外部工具可以做到这一点,但我正在寻找Windows附带的解决方案.

这个问题的有效解决方案是什么样的

从提升的上下文(例如,提升的批处理文件或可执行程序),有效的解决方案应该能够以管理员模式在另一个用户上下文下以编程方式启动进程.假设其他用户的ID和密码可用,而另一个用户是Administrators组的成员.附加限制:

  • 有效的解决方案不能依赖外部工具.由于Windows的新版本默认使用.NET和PowerShell,因此这些是有用的工具.
  • 有效的解决方案不能要求用户交互.这意味着如果弹出UAC窗口,或者需要任何用户确认,则解决方案无效.

请在发布前测试您的解决方案以确保其有效!如果您要提供指向其他解决方案的链接,请在发布之前验证链接的解决方案是否有效.许多声称已经解决这个问题的人实际上没有.

我试过了什么

我尝试过使用Batch Scripts,PowerShell和C#.据我所知,这些技术都不能完成任务.它们都遭受同样的基本问题 - 以另一个用户身份运行任务并且在管理员模式下是相互排斥的进程.让我更具体一点:

为何不批量

用于在不同用户上下文下运行的命令是Runas,它不会启动提升的进程.有几种外部工具可以解决这个问题,但如前所述,这些工具是不允许的.

为什么不PowerShell

启动新进程Start-Process的命令可以提升新进程并以不同用户身份运行,但不能同时运行.我在这里提到了一个未解决的问题.不幸的是,没有人提供解决方案,这让我相信这是不可能的.

为什么不C#

这似乎也是不可能的,因为Process类似乎不支持在管理员模式下以及在不同用户的凭据下启动进程.

为什么不是外部工具?

这迫使我依赖别人的代码来做正确的事情,我宁愿自己编码而不是这样做.事实上,我有一个比依赖别人更好的解决方案,但是相当hackish:

  • 使用任务计划程序创建任务,以便在非常遥远的将来某个时间以指定帐户的管理员模式启动可执行文件.
  • 强制任务立即运行.
  • 等待任务完成.这里回答.

提前感谢任何试图帮助的人!非常感谢,我希望如果没有别的,其他人能够找到这个任务计划程序的工作.

windows batch-file

2
推荐指数
1
解决办法
3150
查看次数

标签 统计

batch-file ×1

windows ×1