Python以管理员身份启动子进程而不调用进程为admin

时间:2014-01-18 14:16:05

标签: python windows admin cx-freeze

我正在尝试在python中编写一个包含几个部分的程序:

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

    然而,硬件监控需要从起步时行驶,当它只能从注册表中读取并不需要完整的管理员权限,后台进程只读取所以也不需要管理员provileges,但配置工具的需求能够写入注册表,因此需要管理员。

    我的问题是: 如何在管理员和参数中调用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
    6. 由于

      詹姆斯

1 个答案:

答案 0 :(得分:1)

经过多次狩猎后,我找到了一个解决方案,我尝试使用:

  1. os.popen
  2. os.startfile
  3. subprocess.call
  4. subprocess.Popen
  5. 最后是os.system

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

    其他解决方案的问题是:

    1 - 仅传递调用应用程序的权限,无论被调用的应用程序需要什么。

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

    3 - 与1相同

    4 - 与1相同

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

    詹姆斯