Windows:更新 Program Files 上安装的自定义软件

Windows:更新 Program Files 上安装的自定义软件

我是一个 Windows 软件应用程序的开发人员,我目前将其发布为“便携式”,这意味着用户需要将其提取到磁盘中的某个位置。我随附了一个小型更新工具(外部应用程序/python 脚本通过 pyinstaller 转换为 .exe),它处理更新如下:

  1. 主应用程序在后台调用更新工具并退出
  2. 更新工具运行:获取新文件、删除主应用程序目录中的文件并提取新文件(新的主应用程序 .exe、dll 和可能需要的其他文件)
  3. 再次更新工具调用主应用程序

问题:通过创建安装程序 (NSIS / InnoSetup) 并让用户在 Program Files 中安装应用程序,我是否能够保留此更新工具?我的意思是,它是否有足够的权限进行这样的更新?如果没有,如何/应该如何进行更新?

答案1

听起来你只需要让更新程序应用能够提升权限。我在这里找到了以下要点: https://gist.github.com/GaryLee/d1cf2089c3a515691919

import sys
import ctypes

def run_as_admin(argv=None, debug=False):
    shell32 = ctypes.windll.shell32
    if argv is None and shell32.IsUserAnAdmin():
       return True

if argv is None:
    argv = sys.argv
if hasattr(sys, '_MEIPASS'):
    # Support pyinstaller wrapped program.
    arguments = map(unicode, argv[1:])
else:
    arguments = map(unicode, argv)
argument_line = u' '.join(arguments)
executable = unicode(sys.executable)
if debug:
    print 'Command line: ', executable, argument_line
ret = shell32.ShellExecuteW(None, u"runas", executable, argument_line, None, 1)
if int(ret) <= 32:
    return False
return None


if __name__ == '__main__':
ret = run_as_admin()
if ret is True:
    print 'I have admin privilege.'
    raw_input('Press ENTER to exit.')
elif ret is None:
    print 'I am elevating to admin privilege.'
    raw_input('Press ENTER to exit.')
else:
    print 'Error(ret=%d): cannot elevate privilege.' % (ret, )

相关内容