2016-10-18 5 views
2

Мне нужно, чтобы enable IE feature для управления WebBrowser. Чтобы подражать IE11, мне нужно записать значение в раздел реестраWIX не может записать значение в реестр, если в нем содержится пробел

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: Добавлен соответствующий issue в WiX хранилище

+0

Вы пытались уйти от whitespacecharacter с помощью ' ' – nozzleman

+0

Это то, что я получаю в моем реестре после выхода из пространства - http://prntscr.com/cvs25g – Valentine

+0

хорошо, поцарапать это;) – nozzleman

ответ

-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> 
0

This Blogpost использует специальный синтаксис я не видел раньше ни. Он утверждает, что переменная может быть определена таким образом, даже если она содержит символ пробела, как так:

<!–?define var.IEFeatureEmulationKey = "Software\Microsoft\Internet Explorer\FeatureControl\FEATURE_BROWSER_EMULATION" ?> 

!- пусть в стороне, это выглядит очень похоже на то, что вы получили. Однако ваше значение содержит более одного пробела. Я не уверен, что это то, что вам действительно нужно, или если это просто для того, чтобы четко обозначить пробелы ...

+0

Не уверен, что это помогает. Во-первых - этот синтаксис заставляет Visual Studio подчеркивать открывающий тег красной линией. Второй - это не похоже на изменение значения переменной. WiX ведет себя как оболочка cmd, когда вы пытаетесь добраться до каталога с пробелом в его имени. Чтобы преодолеть эту проблему в cmd, обычно используются знаки котировки (например, «имя dir»). Есть ли аналогичный синтаксис в скрипте WiX? – Valentine

+0

«Тем не менее, ваше значение содержит более одного пробельные» Это из-за форматирование в SO редактора, в коде есть только один космический – Valentine

+0

я знаю, что вы можете передать эти препроцессора varialbes УКА-Params, который также может быть создан на постоянной основе в VS (Настройки проекта). Возможно, это может быть обходным способом ... Я также прочитал, что у некоторых людей возникла проблема с этим типом проблемы и завербовался весь cmd-param в кавычках .... – nozzleman