我需要enable IE feature进行WebBrowser控件。要模拟IE11,我需要将一个值写入注册表项
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
此操作需要在安装期间完成。 这是我在WIX脚本中的代码:
<?define var.IEFeatureEmulationKey = "Software\Microsoft\Internet Explorer\FeatureControl\FEATURE_BROWSER_EMULATION" ?>
....
<Fragment>
<DirectoryRef Id="TARGETDIR">
<Component Id="registryValues" Guid="{some-guid}" >
<RegistryKey Root="HKCU" Key="$(var.IEFeatureEmulationKey)" Action="create">
<RegistryValue Name="MyApp.EXE" Value="11000" Type="integer" Action="write"/>
</RegistryKey>
</Component>
</Fragment>
仅当 $(var.IEFeatureEmulationKey)不包含空格时,此代码才有效。但是我需要为这个特定的密钥写一个值。
请帮助,即使在注册表项中包含空格,也告诉WiX如何向注册表写入值。
UPD: 在WiX存储库中添加了适当的issue
答案 0 :(得分:0)
This Blogpost使用了一些前所未见的特殊语法。它声明变量可以这种方式定义,即使它包含像这样的空格字符:
<!–?define var.IEFeatureEmulationKey = "Software\Microsoft\Internet Explorer\FeatureControl\FEATURE_BROWSER_EMULATION" ?>
!-
放在一边,它看起来与你得到的非常相似。但是,您的值包含多个空格。我不确定这是否是您真正想要的价值,或者仅仅是为了清楚地指出空白......
答案 1 :(得分:-1)
仍然无法克服这个问题,但我想展示一个帮助我的解决方法。
我使用了WiX允许的自定义操作。首先,我添加了自定义.NET程序集,其中包含以下方法
[CustomAction]
public static ActionResult SetRegistryItems(Session session)
{
session.Log("Begin SetRegistryItems");
try
{
// this private method actually does manipulation with registry
SetRegistry();
}
catch (Exception e)
{
session.Log(e.ToString());
}
return ActionResult.Success;
}
然后应在WiX配置文件(.wxs)中引用此方法
<Fragment>
...
<CustomAction Id='SetRegistryItems' BinaryKey='<NameOfTheAssemblyWithoutExtension>' DllEntry='SetRegistryItems' Execute='immediate'/>
...
<InstallExecuteSequence>
...
<Custom Action="SetRegistryItems" Before="LaunchConditions"/>
...
</InstallExecuteSequence>
...
</Fragment>