【问题标题】:Python starting subprocess as admin without calling process being adminPython以管理员身份启动子进程而不调用进程为管理员
【发布时间】:2014-01-18 14:16:04
【问题描述】:

我正在尝试用 python 编写一个由几个部分组成的程序:

  1. 配置实用程序
  2. 硬件监视器
  3. 后台进程

这个想法是,一旦安装(使用 cx_freeze),硬件监视器就会在后台持续运行,当连接一块兼容的硬件(使用 FTDI 设备的 d2xx 驱动程序)时,它会检查注册表以查看它是否以前已配置,如果已配置,则使用序列号作为参数启动后台进程,但如果没有,则启动配置实用程序。

但是硬件监视器需要从启动开始运行,因为它只从注册表读取不需要完整的管理员权限,后台进程只读取所以也不需要管理员权限,但配置实用程序需要能够写入注册表,因此需要管理员。

我的问题是: 如何在 python 中以管理员身份和参数调用另一个程序?

我考虑使用 os.startfile,因为我已将冻结的程序设置为需要管理员,但是我无法将参数传递给它。

我也考虑过使用 subprocess.Popen,但我不知道如何,或者即使你可以,将它提升到管理员级别,所以虽然它会打开程序并传递它无法写入的参数注册表。

任何帮助将不胜感激,有关更多信息,我的设置是:

  1. Windows 7 64 位(但也计划做 XP 32 位)
  2. python2.7.6(还是 64 位,但计划也做 32 位)
  3. PyUSB-1.6
  4. psutil-1.2.1
  5. cx_freeze-4.3.2

谢谢

詹姆斯

【问题讨论】:

  • 我尝试修改此页面的建议:stackoverflow.com/questions/4645909/… subprocess.call(['runas', '/user:Administrator', 'C:/my_program.exe']) 但是就像那样问题它提示我输入密码(我需要避免)并且即使我输入它也拒绝它。
  • 我还应该补充一点,当它启动另一个进程时,我不介意它请求权限#,即 UAC 框,但我必须能够使用提升的权限和参数来生成它,我似乎找不到...的一个例子

标签: python windows admin cx-freeze


【解决方案1】:

经过多次寻找,我找到了解决方案,我尝试使用:

  1. os.popen
  2. os.startfile
  3. subprocess.call
  4. subprocess.Popen

最后是 os.system

因为 os.system 本质上与在命令行上键入或将参数放入批处理文件然后执行它相同,这要求可执行文件的默认权限,唯一的缺点是当我得到一个 shell 窗口时UAC 窗口出现,直到它打开的程序关闭。

其他解决方案的问题是:

1 - 只传递调用应用程序的权限,而不管被调用应用程序需要什么。

2 - 要求更高级别的权限,但没有传递参数的机制

3 - 与 1 相同

4 - 与 1 相同

如果有人可以推荐一种机制来阻止 shell 窗口,我们将不胜感激。

詹姆斯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 2013-05-31
    相关资源
    最近更新 更多