从程序和功能自动卸载

Automating uninstall from Programs and Features

我有几个应用程序正在尝试使用 Python 自动化从 Windows 7 和 Windows 8.1 中卸载。 Windows 命令行也可以。

程序出现在控制面板的“程序和功能”列表中。单击它们并选择卸载将毫无问题地卸载它们。通过单击“程序和功能”菜单手动卸载非常简单。

这些程序是使用 EXE 文件而不是 MSI 文件安装的。

到目前为止我尝试过的:

1)

wmic product get name

使用命令 'wmic product get name' 仅显示 'Programs and Features' 页面上显示的部分程序的列表。我要卸载的程序没有列出。

2)

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall

程序没有出现在上面的注册表位置

3)

"Use pywinauto to open and manipulate the Programs and Features window directly."

pywinauto 模块(或任何其他可以找到和操作 window 和按钮句柄的模块)确实可以打开并获取程序和功能 window,但操作失败。特别是搜索框输入文字失败,无法选择要卸载的程序。

4)

"Use the uninstall msi that came with the program."

没有。

5)

"Run the installer executable again."

这只是更新软件,而不是删除它。

我用 pywinauto 0.5.2 写了一个 uninstall example for 7-Zip。它在 Windows 7 和 Windows 8.1 上对我来说都很稳定。我相信它对其他人有用。

当然这只是一个演示示例,因为7-Zip可以通过"wmic"带有相应参数的命令简单地卸载。

from __future__ import print_function
import pywinauto

pywinauto.Application(backend="win32").start(r'explorer.exe')
explorer = pywinauto.Application(backend="win32").connect(path='explorer.exe')

# Go to "Control Panel -> Programs and Features"
NewWindow = explorer.window(top_level_only=True, active_only=True, class_name='CabinetWClass')
try:
    NewWindow.AddressBandRoot.click_input()
    NewWindow.type_keys(r'Control Panel\Programs\Programs and Features{ENTER}', with_spaces=True, set_foreground=False)
    ProgramsAndFeatures = explorer.window(top_level_only=True, active_only=True, title='Programs and Features', class_name='CabinetWClass')

    # Wait while list of programs is loading
    explorer.wait_cpu_usage_lower(threshold=5)

    item_7z = ProgramsAndFeatures.FolderView.get_item('7-Zip 9.20 (x64 edition)')
    item_7z.ensure_visible()
    item_7z.click_input(button='right', where='icon')
    explorer.PopupMenu.menu_item('Uninstall').click()

    Confirmation = explorer.window(title='Programs and Features', class_name='#32770', active_only=True)
    if Confirmation.exists():
        Confirmation.Yes.click_input()
        Confirmation.wait_not('visible')

    WindowsInstaller = explorer.window(title='Windows Installer', class_name='#32770', active_only=True)
    if WindowsInstaller.exists():
        WindowsInstaller.wait_not('visible', timeout=20)

    SevenZipInstaller = explorer.window(title='7-Zip 9.20 (x64 edition)', class_name='#32770', active_only=True)
    if SevenZipInstaller.exists():
        SevenZipInstaller.wait_not('visible', timeout=20)

    if '7-Zip 9.20 (x64 edition)' not in ProgramsAndFeatures.FolderView.texts():
        print('OK')
finally:
    NewWindow.close()