2011-09-09 74 views
2

我正嘗試在我的應用程序的程序文件菜單上創建一個快捷方式。但是,由於我的公司可能有許多帶有其自己安裝程序的產品,我希望將它們放在菜單上的子文件夾中,其中每個安裝程序都將其產品快捷方式添加到此子菜單。問題使用Wix創建/刪除startmenu快捷方式

到目前爲止,我已經實現了這一點,但是當我卸載它時,它會在啓動菜單上留下它的工件,如果我卸載它們,它仍會留下公司文件夾以及任何失敗的子菜單。

繼承人我試圖使用的WIX代碼的一部分。我使用的多個安裝相同的代碼爲不同的產品:

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="ProgramFilesFolder" Name ="PFiles"> 
    <Directory Id="CompanyFolder" Name="!(loc.ManufacturerName)"> 
     <Directory Id="INSTALLDIR" Name="!(loc.ProductName)"/> 
    </Directory> 
    </Directory> 
    <Directory Id="ProgramMenuFolder"> 
    <Directory Id="CompanyProgramsFolder" Name="!(loc.ManufacturerName)"> 
     <Directory Id="ProductFolder" Name="!(loc.ProductName)"/> 
    </Directory> 
    </Directory> 
</Directory> 

<DirectoryRef Id="CompanyProgramsFolder"> 
    <Component Id="CompanyProgramsFolderComponent" Guid="{SOME GUID}" > 
    <RegistryValue Root="HKCU" Key="Software\!(loc.ManufacturerName)" Name="installed" Type="integer" Value="1" KeyPath="yes"/> 
    <RemoveFolder Id="CompanyProgramsFolder" On="uninstall"/> 
    </Component> 
</DirectoryRef> 

    <DirectoryRef Id="ProductFolder"> 
    <Component Id="ApplicationShortcut" Guid="SOME GUID"> 
    <Shortcut Id="ApplicationStartMenuShortcut" Icon="Company.ico" Name="!(loc.ProductName)" Description="!(loc.ApplicationDescription)" Target="[INSTALLDIR]MyApplication.exe" WorkingDirectory="INSTALLDIR"/> 
    <Shortcut Id="UninstallProduct" Icon="Company.ico" Name="Uninstall !(loc.ProductName)" Description="Uninstalls !(loc.ProductName)" 
     Target="[SystemFolder]msiexec.exe" 
     Arguments="/x [ProductCode]"/> 
    <RemoveFolder Id="ProductFolder" On="uninstall"/> 
    <RegistryValue Root="HKCU" Key="Software\!(loc.ManufacturerName)\!(loc.ProductName)" Name="installed" Type="integer" Value="1" KeyPath="yes"/> 
    </Component> 
</DirectoryRef> 

<!-- Set the components defined in our fragment files that will be used for our feature --> 
<Feature Id="MainFeature" Title="!(loc.ProductName)" Description="!(loc.ApplicationDescription)" Level="1"> 
    <ComponentGroupRef Id="Files" /> 
    <ComponentRef Id="CompanyProgramsFolderComponent" /> 
    <ComponentRef Id="ApplicationShortcut" /> 
</Feature> 

有沒有辦法得到這個工作?我不喜歡註冊表值在這裏玩什麼功能,所以我可能一直天真地使用它們。

回答

1

請嘗試以下操作。對我有用。

<DirectoryRef Id="ApplicationProgramsFolder"> 
    <Component Id="ApplicationShortcut" Guid="20BC8446-684B-44F5-A1E3-AF6010EAF37C"> 
    <Shortcut Id="ApplicationStartMenuShortcut" 
     Name="Product Name Installer" 
     Description="Product Name Installer" 
     Target="[APPLICATIONROOTDIRECTORY]YourExe.exe" 
     WorkingDirectory="APPLICATIONROOTDIRECTORY"/> 
      <Shortcut Id="UninstallProduct" 
        Name="Uninstall Product Name"    
        Target="[INSTALLLOCATION]YourExe.exe" 
       Arguments="/x [ProductCode]" Description="Uninstalls Product Name" /> 
    <RemoveFolder Id="ApplicationProgramsFolder" 
    On="uninstall"/> 
    <RegistryValue Root="HKCU" 
    Key="Software\Solution\Product name" 

    Name="installed" Type="integer" Value="1" KeyPath="yes"/> 
    </Component> 
</DirectoryRef> 

最後,如下根據您產品的功能加入這種成分(確保ID上述匹配):

<ComponentRef Id="ApplicationShortcut" /> 
+0

如果你想什麼刪除桌面和開始菜單快捷方式。你應該創建多個註冊表項和RemoveFolder項嗎? – rolls