【发布时间】:2014-01-18 14:16:04
【问题描述】:
我正在尝试用 python 编写一个由几个部分组成的程序:
- 配置实用程序
- 硬件监视器
- 后台进程
这个想法是,一旦安装(使用 cx_freeze),硬件监视器就会在后台持续运行,当连接一块兼容的硬件(使用 FTDI 设备的 d2xx 驱动程序)时,它会检查注册表以查看它是否以前已配置,如果已配置,则使用序列号作为参数启动后台进程,但如果没有,则启动配置实用程序。
但是硬件监视器需要从启动开始运行,因为它只从注册表读取不需要完整的管理员权限,后台进程只读取所以也不需要管理员权限,但配置实用程序需要能够写入注册表,因此需要管理员。
我的问题是: 如何在 python 中以管理员身份和参数调用另一个程序?
我考虑使用 os.startfile,因为我已将冻结的程序设置为需要管理员,但是我无法将参数传递给它。
我也考虑过使用 subprocess.Popen,但我不知道如何,或者即使你可以,将它提升到管理员级别,所以虽然它会打开程序并传递它无法写入的参数注册表。
任何帮助将不胜感激,有关更多信息,我的设置是:
- Windows 7 64 位(但也计划做 XP 32 位)
- python2.7.6(还是 64 位,但计划也做 32 位)
- PyUSB-1.6
- psutil-1.2.1
- cx_freeze-4.3.2
谢谢
詹姆斯
【问题讨论】:
-
我尝试修改此页面的建议:stackoverflow.com/questions/4645909/… subprocess.call(['runas', '/user:Administrator', 'C:/my_program.exe']) 但是就像那样问题它提示我输入密码(我需要避免)并且即使我输入它也拒绝它。
-
我还应该补充一点,当它启动另一个进程时,我不介意它请求权限#,即 UAC 框,但我必须能够使用提升的权限和参数来生成它,我似乎找不到...的一个例子
标签: python windows admin cx-freeze