加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

wix – RestartManager在更新期间无法重新启动应用程序

发布时间:2020-12-14 02:16:27 所属栏目:Windows 来源:网络整理
导读:我正在使用c#,.net 4,WIX 3.5,Windows Vista. 我通过p /调用RegisterApplicationRestart方法并处理WM_QUERYENDSESSION和WM_ENDSESSION窗口消息(我返回新的IntPtr(1);)使我的应用程序与RestartManager兼容. 如果我尝试手动更新我的应用程序,那么一切正常: 启
我正在使用c#,.net 4,WIX 3.5,Windows Vista.
我通过p /调用RegisterApplicationRestart方法并处理WM_QUERYENDSESSION和WM_ENDSESSION窗口消息(我返回新的IntPtr(1);)使我的应用程序与RestartManager兼容.

如果我尝试手动更新我的应用程序,那么一切正常:

>启动申请;
>启动包含新应用版本的msi文件;
>在安装/更新期间,我被提示关闭正在运行的应用程序;
>继续运行的应用程序关闭后,安装完成,应用程序重新启动;

如果我尝试从应用程序本身更新我的应用程序,那么我遇到了问题:

1)启动申请;
?2)下载新的msi文件;
?3)使用以下命令启动msi文件:

using (System.Diagnostics.Process p = new System.Diagnostics.Process())
    {
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.FileName = "msiexec";
        p.StartInfo.Arguments = "/i "" + downloadPath + "" /passive";
        p.StartInfo.UserName = "Administrator";
        p.StartInfo.Password = securePassword;
        p.Start();
    }

4)因为我使用的是被动模式,所以应用程序会自动关闭;
?5)安装后,我的应用程序没有重新启动,在事件查看器下我有一个
?事件10007 – 无法重新启动应用程序或服务“MyApp”.

我试过了:

>不为msiexec使用被动模式;
>通过cmd.exe启动msiexec(cmd.exe / C“msiexec / i ….”) – 希望从另一个进程启动msiexec可以解决问题;
>在启动msi更新之前等待60秒(在我的方案中不应该相关,但是MSDN文档有关于它的内容……)

但上述都没有奏效(总是相同的结果).

必须以提升的权限启动设置可能与问题有关,因为在手动更新期间,我在事件查看器中收到警告 – 应用程序MyApp(pid 3220)无法重新启动 – 应用程序SID与Conductor SID不匹配.
尽管如此,重新启动应用程序仍然有效.谷歌警告不会产生任何好的/特定的结果,只是这个警告可能是由于在提示的提示中运行msi引起的.

如何修复(或解决)此问题,以便我可以从应用程序本身更新我的应用程序并在之后重新启动我的应用程序?

编辑 – 额外测试:

>似乎没有必要响应WM_QUERYENDSESSION和WM_ENDSESSION消息,因为手动升级期间的应用程序重启没有它们,所以我们可以排除它们;
>如果我没有为应用程序启动的升级提供管理员凭据,而是在升级期间键入它们,则应用程序重新启动工作;
>如果我运行提升的命令提示符并从那里(手动)启动应用程序升级,则应用程序重新启动仍然有效;
>为了使应用程序升级在标准用户帐户下完全可用(到目前为止,我在使用UAC的管理员帐户下进行了测试),那么我还必须设置p.StartInfo.LoadUserProfile = true;.否则没有任何反应(应用程序重启仍然不起作用);
>我尝试了我可以设置的所有其他进程StartInfo参数 – WorkingDirectory,Redirect,Verb
(=“runas”) – 结果没有变化;
>我将Vista SP2安装到我一直在测试的虚拟机上(到目前为止运行SP1),但没有变化;
>我使用详细日志记录执行了“自动”应用程序升级.最后有一条错误消息 – RESTART MANAGER:重新启动应用程序时失败.错误:352.该错误代码非常通用(http://msdn.microsoft.com/cs-cz/library/aa373665),为了获得更详细的信息我必须编写我自己的安装程序,在错误后调用RmGetList,然后我可能会得到更多细节(这虽然是我的东西不愿意这样做;

编辑2 – msi日志文件:
http://mommi.planet.ee/muu/log.txt

解决方法

假设手动过程确实没有任何问题,似乎您需要管理员权限与“更新本身”相结合会导致这些问题.我看到以下选项:

>创建批处理文件以执行更新当您想更新调用此批处理文件(具有提升的权限)时,让应用程序自行关闭…批处理文件应该等待几秒钟,然后检查应用程序是否仍在运行(并在以后关闭它)然后运行您需要运行msiexec的命令行 – 不要从msiexec中重新启动应用程序,但是在批处理文件中成功运行msiexec之后.>创建一个始终用于启动应用程序的批处理文件当需要更新时,您只需结束应用程序.批处理文件检查可用更新并应用它,在成功更新后启动应用程序或应用程序设置一些环境变量,然后由批处理文件的其余部分进行相应处理.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读