通过CreateProcess启动ClickOnce应用程序

时间:2015-03-22 21:04:16

标签: python clickonce pywin32 pywin

我试图在ClickOnce应用程序中自动执行一系列GUI控件,但是我在通过自动化代码启动应用程序时遇到了问题。我想要做的是使用CreateProcess()启动应用程序,这样我就可以有一个窗口句柄来执行我的控件。

这是我当前的代码(我省略了应用程序的路径):

import win32process
import win32con

path_to_app = "path_to_application\\application.appref-ms"
startupinfo = win32process.STARTUPINFO()

(hprocess, hthread, dwprocessid, dwthreadid) = win32process.CreateProcess(path_to_app, None, None, None, 0, win32con.NORMAL_PRIORITY_CLASS, None, None, startupinfo)

# Execute controls here

这就是我得到的错误:

  

pywintypes.error:(193,' CreateProcess','%1不是有效的Win32应用程序。')

如果我尝试直接打开最终会运行的.exe,它会失败并显示我应该通过快捷方式运行的消息(在本例中为.appref-ms)。

如何启动应用程序并获取其窗口句柄?

2 个答案:

答案 0 :(得分:0)

通常,要从另一个应用程序中运行一次应用程序,您必须首先从.Net框架运行时目录运行dfsvc.exe。 (见https://stackoverflow.com/a/11996812/3803708)。然后尝试运行.appref-ms,希望它能够正常运行。

答案 1 :(得分:0)

此代码适用于我:

import subprocess, time
import pywinauto

p = subprocess.Popen(['cmd.exe', '/c', r'C:\Users\<user_name>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\GitHub, Inc\GitHub.appref-ms'])
time.sleep(5)
app = pywinauto.Application.connect(path='github.exe')
dlg = app.Windows_(visible_only=True)[0]
print dlg.handle

当然,您需要安装


代码在32位github应用程序,Win7 x64,Python 2.6 32位(pywinauto-64 clone)上进行了测试。