- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个使用 MSI 安装程序安装的 Windows 窗体应用程序(C#、NET 3.5)。在此应用程序中,我有一个按钮,按下该按钮会打开具有特定 URL 的浏览器。我用
Process.Start(url);
打开浏览器。这在调试时工作正常,但在安装后效果不佳。例如。
据我所知,这个问题是由安装时与应用程序关联的用户引起的。
考虑到用户可能需要代理和个人浏览器设置,以及“只有我,每个人”的选择应由用户自行决定。最佳行动方案是什么?
我尝试使用当前登录用户调用 Process.Start(url)
ProcessStartInfo.UserName = Environment.UserName
但它也需要密码,要求凭据不是一种选择。
您有任何其他建议吗,我是否错误地使用了 Process.Start(),在安装过程中是否需要进行设置,是否遗漏了什么?
更新:按照 data_smith 的建议使用 Process Explorer 我注意到以下几点:
有没有办法在不要求凭据的情况下使应用程序在当前用户下启动(在 Windows 启动时),即使它是为所有人安装的?
更新:遵循 data_smith 使用 ShellExecute 的建议和建议 here和 here我能够解决问题并获得所需的行为。
主要问题是,当安装程序完成时,应用程序是通过 Process.Start(); 启动的;这将以 NT AUTHORITY\SYSTEM 用户(安装程序运行的用户)身份启动应用程序,因此该应用程序打开的所有浏览器也将在 SYSTEM 用户下。通过使用 data_smith 的建议和上面链接的建议,我能够在当前用户下启动该过程。
计算机重新启动后,应用程序将在正确的用户下启动,因为这是通过注册表项配置的。
最佳答案
我建议访问注册表以确定默认浏览器。
//Create a registry key to read the default browser variable
RegistryKey reader = Registry.ClassesRoot.OpenSubKey(@"http\shell\open\command");
//Determine the default browser
string DefaultBrowser = (string)reader.GetValue("");
我尝试使用此代码,发现我的注册表项以“--\”%1\“”结尾。
我不知道它为什么在那里,但我建议使用以下循环来确保 key 在正确的位置结束。
//If the path starts with a ", it will end with a "
if (DefaultBrowser[0] == '"')
{
for (int count = 1; count < DefaultBrowser.Length; count++)
{
if (DefaultBrowser[count] == '"')
{
DefaultBrowser = DefaultBrowser.Remove(count + 1);
count = DefaultBrowser.Length + 22;
}
}
}
//Otherwise, the path will end with a ' '
else
{
for (int count = 0; count < DefaultBrowser.Length; count++)
{
if (DefaultBrowser[count] == ' ')
{
DefaultBrowser = DefaultBrowser.Remove(count + 1);
count = DefaultBrowser.Length + 22;
}
}
}
关于C# Windows 窗体在安装后不打开默认浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10247214/
对于一个科学实验,我写了一个turtle.py ,它会打开一个 800x480 的窗口并绘制一个缓慢增长的黑点。 turtle.py以 C:\Users\kaza>python C:\Users\ka
我开发了一个 swing 应用程序,但每次运行应用程序时都会打开一个新窗口。我希望如果一个窗口已经打开,则其他窗口不允许打开。 最佳答案 Here是一个 Java 单一应用实例的例子: A singl
有没有办法检测主进程中 Electron 的结构? process.platform 似乎也在 x64 机器上返回 win32,我没有在文档中找到任何获取架构的选项。 最佳答案 你试过 process
public short[] HanningWindow(short[] signal_in ,int pos ,int size) { for (int i= pos; i < pos+si
我有一个具有这些属性的 Electron 窗口: mainWindow = new BrowserWindow({ width: 800, height: 600, title: "Aqu
我有一个 Ubuntu 工作站,我正在尝试引导一个 Windows 节点。 Windows 节点在端口 2222 上打开了 ssh。我一直在关注 http://docs.opscode.com/plu
我是一名优秀的程序员,十分优秀!