WPF C# - 在应用启动时为标准(非特权)用户

时间:2017-04-14 06:59:56

标签: c# wpf registry uac

以下是我尝试在Windows桌面应用上工作的步骤。我需要编写FEATURE_BROWSER_EMULATION。哪个适用于管理员用户,但对于无权在注册表中写入的标准用户则失败。

1)我已设置<requestedExecutionLevel level="highestAvailable" uiAccess="false" />,以便用户在安装时拥有权限。

创建脚本并在安装时运行,由于此脚本而无法安装应用程序。

On Error Resume Next
strComputer = "."
Const HKEY_LOCAL_MACHINE = &H80000002
Set objRegistry = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")

Sub strLocalMachinePath1 = "SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION"
objRegistry.OpenSubKey(HKEY_LOCAL_MACHINE, strLocalMachinePath1);

If objRegistry.GetValue("MyApp.exe") Is Nothing Then
    objRegistry.SetValue("MyApp.exe", 8000)
End If
If objRegistry.GetValue("MyApp.vshost.exe") Is Nothing Then
     objRegistry.SetValue("MyApp.vshost.exe", 11000)
End If

End Sub

2)我尝试了<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />,每次打开应用程序时都要求输入管理员密码。对于非管理员的标准用户,该选项失败。

3)我试图在App.xml.cs - &gt;中写出相同的内容。 App_Startup - &gt;

key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Internet Explorer\Main", true);
            key.CreateSubKey("FeatureControl");
           key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Internet Explorer\Main\FeatureControl", true);
            key.CreateSubKey("FEATURE_BROWSER_EMULATION");
           key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", true);

但没有任何区别,并启动了No Internet connection

的错误
var client = new WebClientPool().GetIdleWebClientObject()

1 个答案:

答案 0 :(得分:2)

如果用户没有权限写入某些注册表项 - 他不能这样做,无论您为应用程序指定requestedExecutionLevel。当您指定类似requireAdministrator之类的东西时,它只是意味着在启动时UAC提示将显示为运行具有管理员权限的应用程序,但如果用户不是管理员 - 那将无法帮助。

但是,在这种情况下,您不需要这样做,因为您可以在HKEY_LOCAL_MACHINE部分注册表中写FEATURE_BROWSER_EMULATION而不是写HKEY_CURRENT_USER

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION