2014-03-12 91 views
2

我想註冊我的應用程序,以在啓動窗口時根據退出對話框中的複選框啓動。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> 

編輯: 我嘗試添加的關鍵註冊表和情況用戶取消選中複選框使用自定義操作將其刪除。我的代碼:

[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

聽起來像你有一個條件功能。取消複選框,而是創建一個子功能。


另取...

用戶選擇喜歡那些不屬於安裝問題;他們是一個配置問題。兩者之間有細微的波浪線。應用程序應該管理自己的配置。安裝完成後,你的用戶作出了配置選擇

後,您的安裝程序可以啓動與命令行參數配置程序來添加或修改的Run鍵。

安裝程序可以刪除卸載時的註冊表項,因爲它會更好地清理運行的關鍵,而不是維護用戶的選擇,當他們再次安裝應用程序的。

1

另一個選擇是編寫運行在基於安裝上的複選框的值的末尾自定義操作,並再次你需要刪除卸載在該註冊表項。

如上所述,最好將其設置爲應用程序的配置而不是安裝。如果用戶改變主意,他應該怎麼做?小提琴在註冊表中(如果他能弄清楚它在哪裏)?卸載並重新安裝以更改設置?

順便說一句,該程序不啓動「作爲Windows啓動」。它將在用戶登錄時啓動,這不是一回事。如果你希望它在用戶登錄時啓動,我會以「當你登錄時」將它描述給你的用戶。如果你希望它在Windows啓動時啓動,它將需要成爲一項服務。

+0

謝謝!它已經可以從應用程序配置,但我仍然希望從安裝程序。我根據您的回答編輯了我的問題,嘗試使用自定義操作無效。 – eskadi

相關問題