2014-03-12 3 views
2

Я хочу зарегистрировать свое приложение для запуска при запуске Windows на основе флажка в диалоговом окне выхода.WiX: условно зарегистрировать приложение для запуска при запуске Windows

Я следовал this, но кажется, что запись в реестр выполняется до того, как окончательный диалог (и соответствующий флажок) появится.

Мой код: в product.wxs:

<Property Id="APP_AUTOMATIC_START_UP">1</Property> 
.... 
<Component Id="AppAutoStartUp" Guid="{MyGuid}"> 
<RegistryValue Id="App.rst" Root="HKCU" Action="write" Key="Software\Microsoft\Windows\CurrentVersion\Run" Name="App" Value="[#MyApp.exe]" Type="string" /> 
<Condition><![CDATA[Installed OR APP_AUTOMATIC_START_UP]]></Condition> 

в MyExitDialog.wxs:

<Control Id="AutomaticStartup" Type="CheckBox" Height="18" Width="295" X="135" Y="190" Text="Run App upon windows startUp" Property="APP_AUTOMATIC_START_UP" CheckBoxValue="1"> 
<Condition Action="hide" >Installed</Condition> 
<Condition Action="show" >NOT Installed</Condition> 

EDIT: Я попытался добавить ключ в реестр и в случае с пользователь снимите флажок, удалив его с помощью пользовательского действия. мой код:

[CustomAction] 
public static ActionResult NotRunOnStartUp(Session session) 
{ 
    session.Log("Begin NotRunOnStartUp"); 
    RegistryKey rk = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); 
    rk.DeleteValue("MyApp"); 
    return ActionResult.Success; 
} 

<Binary Id="NotRunOnStartUpBinary" src="..\CustomActions\NotRunOnStartUp\bin\$(var.Configuration)\NotRunOnStartUp.CA.dll" /> 
... 
<CustomAction Id="NotRunOnStartUpCA" 
     Return="check" 
     Execute="immediate" 
     BinaryKey="NotRunOnStartUpBinary" 
     DllEntry="NotRunOnStartUp" /> 
... 
<Publish Dialog="MyExitDialog" Control="Finish" Event="DoAction" Value="NotRunOnStartUpCA">APP_AUTOMATIC_START_UP= 0 and NOT Installed</Publish> 

В результате, во время инсталяции я пишу ключ реестр, но когда я снимите флажок и нажмите кнопку Готово ключ не удаляется из реестра. Любые идеи почему?

ответ

0

Похоже, что у вас есть условная функция. Снимите флажок и вместо этого сделайте вспомогательную функцию.


Другой принять ...

выбор пользователя, как, что не является проблемой установки; Это проблема конфигурации. Между ними есть тонкая и волнистая линия. Программы приложения должны управлять собственной конфигурацией.

После завершения установки и выбора пользователя ваш установщик может запустить конфигурационную программу с аргументами командной строки, чтобы добавить или изменить ключ запуска.

Установщик может удалить запись реестра при удалении, так как было бы лучше очистить клавишу «Запуск», чем сохранить выбор пользователя при повторном установке приложения.

1

Другой выбор - написать пользовательское действие, которое выполняется в конце установки, в зависимости от значения этого флажка, и снова вам нужно будет удалить эту запись реестра при деинсталляции.

Как и было предложено, лучше сделать его конфигурацией приложения, а не установкой. Если пользователь передумает, что он должен делать? Скрипт в реестре (если он может понять, где он)? Удалить и переустановить, чтобы изменить настройку?

Кстати, программа не запускается «при запуске окон». Он начнется, когда пользователь войдет в систему, и это не одно и то же. Если вы хотите, чтобы он запускался при входе пользователя в систему, я бы описал его для ваших пользователей как «при входе в систему». Если вы хотите, чтобы он запускался при запуске Windows, он должен был быть сервисом.

+0

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

Смежные вопросы