【问题标题】:Run msi installer via paramiko and wait for the task to be done通过 paramiko 运行 msi 安装程序并等待任务完成
【发布时间】:2021-02-28 13:30:18
【问题描述】:

我在这里遇到了一些麻烦。

愿望
一个 python 脚本,可以更新我所有工厂机器上的第三方软件。

我是怎么做到的
我编写了一个 python 脚本,它使用 Paramiko 对所有计算机进行 ssh,复制所需文件并在任何成功连接上运行 .msi 包。

问题
好吧,我没有找到任何方法或方法来等待 msi 进程结束并取回任何退出代码。 我需要等到安装结束并获得返回码,因为我需要在 x86 程序安装目录中复制修补程序文件。
所以,我尝试了以下方法:

stdin, stdout, stderr = self.client.exec_command("msiexec.exe /a msi_file_name.msi /qn")
stdin, stdout, stderr = self.client.exec_command("start /wait msiexec.exe /a msi_file_name.msi /qn")
stdin, stdout, stderr = self.client.exec_command("msi_file_name.msi /qn")

但以上似乎都没有等待安装结束。

我的问题
我想知道是否有任何方法可以运行 msi 并让 shell 等待任务结束。 通过 python 或通过 exec_command 两种方式都可以,使用一些 cmd 解决方法。

谢谢,
您好

【问题讨论】:

    标签: python synchronization windows-installer paramiko


    【解决方案1】:

    这不是 Paramiko,甚至不是 Python 问题。这是/qn 开关的结果。使用该开关,顶级msiexec 进程将安装委托给隐藏的子进程并立即终止自身。

    考虑改用/qb/qb! 或类似名称。

    msiexec command-line options


    复制自 Inno Setup 上的类似问题:
    Inno Setup AfterInstall procedure is executed too early, when installing MSI from Run section with /qn (silent) switch

    【讨论】:

    • 谢谢,但我的目标是通过 ssh 管理会话安静地安装应用程序,/qb 实际上会提示 GUI,这是一个问题:没有人会与模态交互.另外,我知道这不是一个直接的 paramiko 问题,但正如所问的,也许有一种方法可以通过 paramiko 实现它(例如:一个 ipotetic 函数 client.exec_msi())
    • Paramiko 无论如何也帮不了你。因此,如果您知道这不是 Paramiko/Python 问题,那么您问了一个错误的问题。考虑询问仅限本地 MSI 的问题,例如:“如何从命令行执行静默 MSI 安装并等待它完成”。一旦您对此有了答案,通过 SSH/Paramiko 远程执行相同的操作将是微不足道的。您当前的问题需要 MSI 和 Paramiko/Python/SSH 知识。您将很难找到同时具备这两种专业知识的人。限制问题的范围。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 2011-04-22
    • 2012-03-03
    相关资源
    最近更新 更多