Запустите приложение 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 и, надеюсь, это сработает.

Другие вопросы по тегам