Запустите приложение ClickOnce через CreateProcess
Я пытаюсь автоматизировать серию элементов управления графическим интерфейсом в приложении ClickOnce, однако у меня возникают проблемы с запуском приложения через мой код автоматизации. То, что я хотел бы сделать, это запустить приложение с 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 ответа
Этот код работает для меня:
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
Конечно, вам нужно установить
- pywinauto 0.4.2 на Python 2.x 32-битный
- или pywinauto-64, если вы используете Python 3.x (или ваше приложение 64-битное).
Код был протестирован на 32-битном github-приложении, Win7 x64, 32-битном Python 2.6 (клон pywinauto-64).
Как правило, чтобы щелкнуть один раз приложение для запуска из другого приложения, вы должны сначала запустить dfsvc.exe
из каталога среды выполнения.Net Framework. (см. /questions/8995106/kak-ukazat-uchetnyie-dannyie-polzovatelya-dlya-prilozheniya-zapuskaemogo-odnim-klikom/8995119#8995119). Затем попробуйте запустить .appref-ms
и, надеюсь, это сработает.