我有使用MSI安装程序安装的Windows窗体应用程序(C#,NET 3.5)。 在这个应用程序中,我有一个按钮,当按下时打开一个具有特定URL的浏览器。 我使用安装后C#Windows窗体不打开默认浏览器
Process.Start(url);
打开浏览器。 这在调试时正常工作,但在安装之后,它的结果并不理想。例如。
- 如果我安装了Just Me选项,我打开了默认的带有当前设置的 浏览器(FF)。
- 如果我跟每个人都选择安装它,当我按下按钮 它会打开一个版本的IE有任何的我最近设置 (代理,工具栏显示等)
至于我能告诉这个问题是由安装时与应用程序关联的用户造成的。
考虑到用户可能需要代理和个人浏览器设置,并且Just Me,Everyone的选择应该由用户决定。什么是最好的课程?
我尝试使用
ProcessStartInfo.UserName = Environment.UserName
调用的Process.Start(URL)与登录用户当前但它也需要一个密码,并要求凭据是不是一种选择。
你有没有其他的建议,我是否错误地使用了Process.Start(),在安装过程中是否有需要设置的设置,有什么我错过了?
UPDATE: 使用Process Explorer中的data_smith建议我注意到以下几点:
- 如果我安装了每个人的应用程序将在NT AUTHORITY \ SYSTEM用户,因此未配置的浏览器下启动。
- 如果我安装只用我的应用程序中选择它 下启动当前用户
有没有一种方法,而无需在当前用户下要求凭证,让应用程序启动(在Windows启动)甚至尽管它是为大家安装的?
UPDATE:继data_smith建议使用的ShellExecute,我能够解决的问题,并获得所需的行为的建议here和here。
主要问题是当安装程序完成应用程序启动Process.Start();这会以NT AUTHORITY \ SYSTEM用户(用户安装程序在其下运行)启动应用程序,因此由此应用程序打开的所有浏览器也将在SYSTEM用户下。通过使用data_smith的建议和上面链接的建议,我能够在当前用户下启动该进程。
计算机重新启动后,应用程序将以正确的用户身份启动,因为这是通过注册表项配置的。
你是否从安装程序运行你的应用程序? – ogggre 2012-04-20 13:32:39
安装应用程序后立即开始,它始终在机器启动时开始。它位于系统托盘中。 – Constantin 2012-04-20 13:36:15
我认为@ogggre问的是,你的应用程序是否由安装程序启动?这可能是一个“凭据”相关的问题。使用ProcExp(由SysInternals)查看您的程序的父项。 – data 2012-04-20 15:51:32