我使用 MSI 安装程序安装了一个 Windows 窗体应用程序(C#、NET 3.5)。在这个应用程序中,我有一个按钮,按下该按钮会打开具有特定 URL 的浏览器。我用
Process.Start(url);
打开浏览器。这在调试时工作正常,但在安装后它的结果并不理想。例如。
- 如果我在选择 Just Me 选项的情况下安装它,我会使用当前设置打开我的默认浏览器 (FF)。
- 如果我使用“所有人”选项安装它,当我按下按钮时,它会打开一个没有我最近设置的 IE 版本(代理、显示的工具栏等)
据我所知,此问题是由安装时与应用程序关联的用户引起的。
考虑到用户可能需要代理和个人浏览器设置,而 Just Me, Everyone 的选择应由用户决定。最好的做法是什么?
我尝试使用当前登录的用户调用 Process.Start(url)
ProcessStartInfo.UserName = Environment.UserName
但它也需要密码,并且要求提供凭据不是一种选择。
您还有其他建议吗,我是否错误地使用了 Process.Start(),在安装过程中是否需要进行设置,有什么我遗漏的吗?
更新: 使用 Process Explorer 作为 data_smith 建议我注意到以下内容:
- 如果我为每个人安装应用程序,它将在 NT AUTHORITY\SYSTEM 用户下启动,因此是未配置的浏览器。
- 如果我在选择 Just Me 的情况下安装应用程序,它将在当前用户下启动
有没有办法在不要求凭据的情况下使应用程序在当前用户下启动(在 Windows 启动时),即使它是为所有人安装的?
更新:根据 data_smith 使用 ShellExecute 的建议以及此处和此处的建议,我能够解决问题并获得所需的行为。
主要问题是,当安装程序完成时,应用程序是使用 Process.Start(); 启动的。这以 NT AUTHORITY\SYSTEM 用户(用户安装程序在其下运行)启动应用程序,因此该应用程序打开的所有浏览器也将在 SYSTEM 用户下。通过使用 data_smith 的建议和上面链接的建议,我能够在当前用户下启动该过程。
计算机重新启动后,应用程序在正确的用户下启动,因为这是通过注册表项配置的。