Mar*_*rko 5 windows-installer wix
我正在使用c#,.net 4,WIX 3.5,Windows Vista.我通过p /调用RegisterApplicationRestart方法并处理WM_QUERYENDSESSION和WM_ENDSESSION窗口消息(我返回new IntPtr(1);
)使我的应用程序与RestartManager兼容.
如果我尝试手动更新我的应用程序,那么一切正常:
如果我尝试从应用程序本身更新我的应用程序,那么我遇到了问题:
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();
}
Run Code Online (Sandbox Code Playgroud)
4)因为我使用的是被动模式,所以应用程序会自动关闭;
5)安装后,我的应用程序没有重新启动,在事件查看器下我有一个
事件10007 - 应用程序或服务"MyApp"无法重新启动.
我试过了:
但上述都没有奏效(总是相同的结果).
必须以提升的权限启动设置可能与问题有关,因为在手动更新期间,我在事件查看器中收到警告 - 应用程序MyApp(pid 3220)无法重新启动 - 应用程序SID与Conductor SID不匹配.
尽管如此,重新启动应用程序仍然有效.谷歌警告不会产生任何好的/特定的结果,只是这个警告可能是由于在提示的提示中运行msi引起的.
如何修复(或解决)此问题,以便我可以从应用程序本身更新我的应用程序并在之后重新启动我的应用程序?
编辑 - 额外测试:
p.StartInfo.LoadUserProfile = true;
.否则没有任何反应 (应用程序重启仍然不起作用);编辑2 - msi日志文件:http :
//mommi.planet.ee/muu/log.txt
假设手动过程确实没有任何问题,那么您对管理员权限的需求与“更新本身”的结合似乎导致了这些问题。我看到以下选项:
创建一个批处理文件来执行更新
当您想要更新时调用此批处理文件(具有提升的权限),使应用程序自行关闭...批处理文件应该等待几秒钟,然后检查应用程序是否仍在运行(并关闭以防万一),然后运行您需要运行的命令行msiexec
- 不要从 msiexec 中重新启动应用程序,而是在msiexec
从批处理文件成功运行后重新启动应用程序。
创建一个始终用于启动应用程序的批处理文件,
当需要更新时,您只需结束应用程序即可。批处理文件检查可用更新并应用它,在成功更新后启动应用程序,或者应用程序设置一些环境变量,然后由批处理文件的其余部分进行相应处理。