[英]WiX installer .msi doesn't install the attached .lib and .dll files
因此,我有一個可以正常運行的Product.wxs文件,該文件安裝了一個漂亮的Signature繪圖程序。 我使用基本的Add(int,int)方法添加了帶有TestClass的TestLibrary項目,並將其用於程序中只是出於測試目的,然后加熱收集類的目錄(並通過XSLT文件進行格式化) ,將Output.wxs鏈接到項目,引用ComponentGroup,並嘗試將整個組件安裝在一起,希望可以一起安裝該類,並且軟件可以運行。 事實並非如此,它可以完美地構建和安裝,只是為了使已安裝的.exe在啟動時失敗。
這是Product.wxs:
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="6daf7a49-43a8-403b-8d15-96197c8751cc" Name="SetupProject_Sig" Language="1033" Version="1.0.0.0" Manufacturer="VTC" UpgradeCode="f2ad826c-59b9-4f9f-af0d-8c9d80030605">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<Condition Message="You need to be an administrator to install this product.">
Privileged
</Condition>
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<MediaTemplate />
<Feature Id="ProductFeature" Title="SetupProject_Sig" Level="1">
<ComponentGroupRef Id="ProductComponents" />
<ComponentGroupRef Id="ComComponents" />
</Feature>
<Property Id="ApplicationFolderName" Value="Signature" />
<Property Id="WixAppFolder" Value="WixPerMachineFolder" />
<WixVariable Id="WixUISupportPerUser" Value="1" Overridable="yes" />
<WixVariable Id="WixUISupportPerMachine" Value="1" Overridable="yes" />
<Property Id="WIXUI_INSTALLDIR" Value="APPLICATIONFOLDER" />
</Product>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="APPLICATIONFOLDER" Name="SetupProject_Sig" />
</Directory>
</Directory>
</Fragment>
<Fragment>
<Feature Id="Complete" Title="Signature Tosz 1.0" Description="All files." Level="1" Display="expand" ConfigurableDirectory="APPLICATIONFOLDER">
<Feature Id="MainProgram" Title="Program" Description="The main executable." Level="1">
<ComponentRef Id="MainExecutable" />
<ComponentRef Id="HelperLibrary" />
<ComponentRef Id="ProgramMenuDir" />
</Feature>
<Feature Id="Documentation" Title="Description" Description="Instruction manual." Level="1000">
<ComponentRef Id="Manual" />
<Condition Level="1">FILEEXISTS</Condition>
</Feature>
</Feature>
</Fragment>
<Fragment>
<ComponentGroup Id="ProductComponents" Directory="APPLICATIONFOLDER">
<Component Id="ProductComponent" Guid="b3594fac-7524-4529-8874-5811705996b8">
<File Source="$(var.Control_Sig.TargetPath)" />
</Component>
</ComponentGroup>
</Fragment>
<Fragment>
<DirectoryRef Id="TARGETDIR">
<Component Id="RegistryComp">
<RegistryKey Id="ToszRegApplicationfolder" Root="HKLM" Key="Software\VTC\Tosz 1.0" Action="createAndRemoveOnUninstall">
<RegistryValue Type="string" Name="APPLICATIONFOLDER" Value="[APPLICATIONFOLDER]" />
<RegistryValue Type="integer" Name="Flag" Value="0" />
</RegistryKey>
</Component>
</DirectoryRef>
</Fragment>
</Wix>
預制熱指令:
call "%wix%\bin\heat.exe" dir "$(SolutionDir)\TestLibrary\bin\Debug" -var "var.TargetDir" -gg -g1 -srd -cg ComComponents -template fragment -out "$(ProjectDir)\Output.wxs" -v -t "$(ProjectDir)\bin\Debug\Filter.xslt"
輸出.wxs
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="TARGETDIR" />
</Fragment>
<Fragment>
<ComponentGroup Id="ComComponents">
<Component Id="cmp278E5D4E5835479434800F8B4056EB4B" Directory="TARGETDIR" Guid="A09371FD-ACE5-474E-B1B8-D9C83CF05497">
<Class Id="{DB173953-D21D-3F29-BC10-C6299EBD2BFF}" Context="InprocServer32" Description="TestLibrary.TestClass" ThreadingModel="both" ForeignServer="mscoree.dll">
<ProgId Id="TestLibrary.TestClass" Description="TestLibrary.TestClass" />
</Class>
<File Id="fil296E15219B07AF9559E0660E87293FC3" KeyPath="yes" Source="$(var.TargetDir)\TestLibrary.dll" />
<RegistryValue Root="HKCR" Key="CLSID\{DB173953-D21D-3F29-BC10-C6299EBD2BFF}\Implemented Categories\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}" Value="" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{DB173953-D21D-3F29-BC10-C6299EBD2BFF}\InprocServer32\1.0.0.0" Name="Class" Value="TestLibrary.TestClass" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{DB173953-D21D-3F29-BC10-C6299EBD2BFF}\InprocServer32\1.0.0.0" Name="Assembly" Value="TestLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{DB173953-D21D-3F29-BC10-C6299EBD2BFF}\InprocServer32\1.0.0.0" Name="RuntimeVersion" Value="v4.0.30319" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{DB173953-D21D-3F29-BC10-C6299EBD2BFF}\InprocServer32\1.0.0.0" Name="CodeBase" Value="file:///[#fil296E15219B07AF9559E0660E87293FC3]" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{DB173953-D21D-3F29-BC10-C6299EBD2BFF}\InprocServer32" Name="Class" Value="TestLibrary.TestClass" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{DB173953-D21D-3F29-BC10-C6299EBD2BFF}\InprocServer32" Name="Assembly" Value="TestLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{DB173953-D21D-3F29-BC10-C6299EBD2BFF}\InprocServer32" Name="RuntimeVersion" Value="v4.0.30319" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{DB173953-D21D-3F29-BC10-C6299EBD2BFF}\InprocServer32" Name="CodeBase" Value="file:///[#fil296E15219B07AF9559E0660E87293FC3]" Type="string" Action="write" />
</Component>
<Component Id="cmp5BD81C93D46AA48BFAA1819DF54A67EB" Directory="TARGETDIR" Guid="86402057-DA0F-4B8E-BD0B-4973739A4008">
<File Id="fil108FAB265F126BACEED88B56AB065A99" KeyPath="yes" Source="$(var.TargetDir)\TestLibrary.tlb">
<TypeLib Id="{A9413C7C-F0C0-4DB1-82E3-116C411A0342}" Description="TestLibrary" HelpDirectory="TARGETDIR" Language="0" MajorVersion="1" MinorVersion="0">
<Interface Id="{A13FF8B0-AC7C-33E5-B0F3-5366304512AC}" Name="_TestClass" ProxyStubClassId32="{00020424-0000-0000-C000-000000000046}" />
</TypeLib>
</File>
</Component>
</ComponentGroup>
</Fragment>
</Wix>
Main()中添加的行用於測試:
System.Diagnostics.Debug.WriteLine(new TestLibrary.TestClass().Add(5, 3));
我已經嘗試修復了兩天,這讓我發瘋了。 似乎無法弄清楚哪里出了問題,輸出看起來很完美,應該安裝了該類,但是Signature程序無法啟動。
提前致謝!
我不具備Phil所具備的COM方面的復雜知識,因此這里是我調試它的方法。
啟動干凈的快照虛擬機。 安裝您的MSI。 運行注冊表快照差異工具,例如InstallWatcher Pro。 運行regsvr32.exe your.dll拍攝另一個快照並進行比較。 運行您的程序,以確認regsvr32.exe解決了該問題。 如果沒有,請在別處尋找麻煩的根源。 回滾虛擬機快照。
如果是這樣,請分析差異並將其創作到您的.wxs中並進行重建。 沖洗並重復。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.