C# 如果项包含空间,WIX无法将值写入注册表
我需要为WebBrowser控制做准备。为了模拟IE11,我需要向注册表项写入一个值C# 如果项包含空间,WIX无法将值写入注册表,c#,internet-explorer,wix,registry,webbrowser-control,C#,Internet Explorer,Wix,Registry,Webbrowser Control,我需要为WebBrowser控制做准备。为了模拟IE11,我需要向注册表项写入一个值 HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION 此操作需要在安装过程中完成。 以下是我在WIX脚本中的代码: <?define var.IEFeatureEmulationKey = "Software\Microsoft\Internet Ex
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存储库中添加了一些我以前也没有见过的特殊语法。它声明变量可以这样定义,即使它包含如下空白字符:
<!–?define var.IEFeatureEmulationKey = "Software\Microsoft\Internet Explorer\FeatureControl\FEATURE_BROWSER_EMULATION" ?>
-代码>抛开它不谈,它看起来与您得到的非常相似。但是,您的值包含多个空格。我不确定这是否是您真正想要的值,或者只是为了清楚地指出空白…使用了一些我以前也没有见过的特殊语法。它声明变量可以这样定义,即使它包含如下空白字符:
<!–?define var.IEFeatureEmulationKey = "Software\Microsoft\Internet Explorer\FeatureControl\FEATURE_BROWSER_EMULATION" ?>
-代码>抛开它不谈,它看起来与您得到的非常相似。但是,您的值包含多个空格。我不确定这是否是您真正想要的值,或者只是为了清楚地指出空白…仍然无法克服这个问题,但是我想展示一个对我有帮助的解决方法
我使用了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)中引用
...
...
...
...
...
仍然无法克服这个问题,但是我想展示一个对我有帮助的解决方法
我使用了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)中引用
...
...
...
...
...
您是否尝试过使用 代码>这是我在转义空间后在注册表中获得的即时消息-好的,划掉它;)你找到解决办法了吗@Valentine我刚刚使用了在C#上编写的自定义程序集,对注册表名和值没有这样的限制。您是否尝试过使用 代码>这是我在转义空间后在注册表中获得的即时消息-好的,划掉它;)你找到解决办法了吗@Valentine我刚刚使用了在C#上编写的自定义程序集,对于注册表名和值没有这样的限制。不确定它是否有用。首先-此语法使VisualStudio在开始标记下面加红线。第二,这看起来不像变量的更改值。当您试图访问名称中带有空格的目录时,WiX的行为类似于cmd shell。为了克服cmd中的这个问题,通常使用引号(例如“dir name”)。WiX脚本中有类似的语法吗?“但是,您的值包含多个空格”这是因为SO编辑器中的格式设置,在代码中只有一个空格我知道您可以通过cmd params传递这些预处理器变量,这也可以在VS(项目设置)中永久设置。也许这是一个解决办法。。。我还读到一些人对这种问题有疑问,并将整个cmd参数用引号括起来……不确定它是否有用。首先-此语法使VisualStudio在开始标记下面加红线。第二,这看起来不像变量的更改值。当您试图访问名称中带有空格的目录时,WiX的行为类似于cmd shell。为了克服cmd中的这个问题,通常使用引号(例如“dir name”)。WiX脚本中有类似的语法吗?“但是,您的值包含多个空格”这是因为SO编辑器中的格式设置,在代码中只有一个空格我知道您可以通过cmd params传递这些预处理器变量,这也可以在VS(项目设置)中永久设置。也许这是一个解决办法。。。我还读到一些人对这种问题有疑问,并将整个cmd参数用引号括起来。。。。