在shell中执行几个提升的命令(或类似的)

我有一个需要提升权限执行几个命令,如:

  1. 调用修改服务的.config文件的程序(需要pipe理员权限)
  2. 净停止myservice(需要pipe理员权限)
  3. 网开始myservice(需要pipe理员权限)

所有这些dynamic的,例如第一行可能包含代理设置,包括用户名和密码,或对设置文件的任何其他修改。 (设置文件在程序文件夹中,外部提供修改设置文件的程序,实际的信息将由用户通过GUIinput)。

我想创build一个非常灵活的解决scheme,使用带有redirectstdin和stdout的cmd.exe进程。 但是..它看起来像“runas”(需要ShellExecute)和redirectinput/输出是独家。

(另外,我注意到redirect和cmd.exe是很难处理..我必须编写自己的函数,例如作为ReadLine的替代品,因为ReadLine在最后期待​​NewLine并等待,如果有一个命令提示符(这意味着你的文本就像c:\ bla>,但是没有NewLine,但是不知道结果是什么,所以写一些通用的东西很困难。)

我能想到的有三种select:

  1. 得到每一个命令的UAC提示(我不喜欢那个)
  2. 启动一个提升的进程,然后可以调用任何想要的东西 – >需要额外的项目(.exe),我想避免,也使得部署更加困难(附加文件)
  3. 在飞行中创build一个batch file,运行它提升。 这也是我想避免的,因为在那个文件中可能有纯文本的密码信息(例如用户/密码代理)。 我至less要确保总是覆盖它的内容,然后删除它。

如何处理这个?

Solutions Collecting From Web of "在shell中执行几个提升的命令(或类似的)"

我想你已经诊断出这个问题,并列举了你可用的选项。 在我看来,最好的选择是使用runas来创建一个新的高级过程,并让这个过程来完成这个工作。

另一个进程不一定是一个不同的可执行文件,它可能是你的现有的可执行文件,用特定的命令行参数启 一旦你有另一个进程运行提升,你当然可以使用cmd重定向stdin / stdout来完成这项工作。 但是,为什么使用net stop/start而不是服务API? 你可以做的.config文件修改,而无需启动一个单独的进程?