C# 包括WiX安装程序的dll文件
我制作了一个利用Ghostscript库的C#winforms应用程序,并构建了一个wix msi安装程序,可在任何计算机上下载。在winforms应用程序本身中,我将Ghostscript.NET.dll(用于gs库/dll的c#wrapper)和gsdll32.dll(32位本机库)设置为资源文件。我构建了一个wix项目(创建wixattent2.msi),将应用程序和dll文件安装到Programs(x86)文件夹中,并在“开始”菜单上显示应用程序。然后我构建了一个wix引导程序(创建POD_Installer.exe)包,这样我就可以运行安装程序(wixattent2.msi)并在需要时安装NetFx461Redist包 当我运行POD_Installer.exe时,我设置的安装组件最终会一起放在正确的文件夹中。然而,当我开始使用winforms应用程序时,我遇到了一些问题。当我看到应用程序中使用ghostscript的部分时,我收到一条错误消息,说“ghostscript本机库找不到”。当我展开消息时,它会显示除gsdll32.dll之外的所有正在安装的组件。我对我的wix项目做了哪些更改,这样我就不会有任何问题了 以下是wixattent2.msi:C# 包括WiX安装程序的dll文件,c#,winforms,dll,wix,ghostscript,C#,Winforms,Dll,Wix,Ghostscript,我制作了一个利用Ghostscript库的C#winforms应用程序,并构建了一个wix msi安装程序,可在任何计算机上下载。在winforms应用程序本身中,我将Ghostscript.NET.dll(用于gs库/dll的c#wrapper)和gsdll32.dll(32位本机库)设置为资源文件。我构建了一个wix项目(创建wixattent2.msi),将应用程序和dll文件安装到Programs(x86)文件夹中,并在“开始”菜单上显示应用程序。然后我构建了一个wix引导程序(创建PO
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="POD" Language="1033" Version="1.0.0.0" Manufacturer="POD" UpgradeCode="PUT-GUID-HERE">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<Icon Id="Ruler.ico" SourceFile="Ruler.ico"/>
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<MediaTemplate />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="POD" />
</Directory>
<Directory Id="ProgramMenuFolder">
<Directory Id="ApplicationProgramsFolder" Name="POD"/>
</Directory>
</Directory>
<DirectoryRef Id="INSTALLFOLDER">
<Component Id="_6lumber.exe" Guid="*">
<File Id="_6lumber.exe" Source="POD.exe" KeyPath="yes" Checksum="yes"/>
</Component>
<Component Id="_notepadcalc.exe" Guid="*">
<File Id="_notepadcalc.exe" Source="notepadcalc2.exe" KeyPath="yes" Checksum="yes"/>
</Component>
<Component Id="Erics_takeoff_103118.xlsx" Guid="*">
<File Id="Erics_takeoff_103118.xlsx" Source="Erics_takeoff_103118.xlsx" KeyPath="yes"/>
</Component>
<Component Id="gs.dll" Guid="*" >
<File Id="gs.dll" Source="gsdll32.dll" KeyPath="yes"/>
</Component>
<Component Id="gsnet.dll" Guid="*">
<File Id="gsnet.dll" Source="Ghostscript.NET.dll" KeyPath="yes"/>
</Component>
</DirectoryRef>
<DirectoryRef Id="ApplicationProgramsFolder">
<Component Id="ApplicationShortcut" Guid="*">
<Shortcut Id="ApplicationStartMenuShortcut"
Name="POD" Icon="Ruler.ico"
Description="My Application Description"
Target="[#_6lumber.exe]"
WorkingDirectory="INSTALLFOLDER"/>
<Shortcut Id="ApplicationStartMenu"
Name="POD_CAD" Icon="Ruler.ico"
Description="My Application Description"
Target="[#_notepadcalc.exe]"
WorkingDirectory="INSTALLFOLDER"/>
<RemoveFolder Id="CleanUpShortCut" Directory="ApplicationProgramsFolder" On="uninstall"/>
<RegistryValue Root="HKCU" Key="Software\Microsoft\POD" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
</Component>
</DirectoryRef>
<Feature Id="POD" Title="POD" Level="1">
<ComponentRef Id="gs.dll"/>
<ComponentRef Id="gsnet.dll"/>
<ComponentRef Id="_6lumber.exe" />
<ComponentRef Id="_notepadcalc.exe"/>
<ComponentRef Id="Erics_takeoff_103118.xlsx"/>
<ComponentRef Id="ApplicationShortcut"/>
</Feature>
</Product>
</Wix>
编辑:引导程序生成POD_Installer.exe
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:bal="http://schemas.microsoft.com/wix/BalExtension">
<Bundle Name="POD_Installer" Version="1.0.0.0" Manufacturer="POD" UpgradeCode="732da7cb-f953-4cfd-af6e-5c25db16b47c">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
<bal:WixStandardBootstrapperApplication
LogoFile="Resources\custom_icon_design_flatastic_10_ruler-3.png"
LicenseFile="Resources\mylittlelicense.rtf"
/>
</BootstrapperApplicationRef>
<PayloadGroup Id="NetFx461RedistPayload" >
<Payload Name="redist\NDP461-KB3102436-x86-x64-AllOS-ENU.exe"
SourceFile="Resources\NDP461-KB3102436-x86-x64-AllOS-ENU.exe" />
</PayloadGroup>
<Chain>
<!-- TODO: Define the list of chained packages. -->
<!-- <MsiPackage SourceFile="path\to\your.msi" /> -->
<PackageGroupRef Id="NetFx461Web"/>
<MsiPackage Id="POD_Measuring_Tool" SourceFile="C:\Users\Admin\source\repos\wixattempt2\wixattempt2\bin\Debug\wixattempt2.msi"
Cache="yes" ForcePerMachine ="yes"/>
</Chain>
</Bundle>
</Wix>
:我们首先需要确定您提到的文件是否确实存在于MSI中。让我们做一个MSI的管理安装——一个美化的文件提取。在命令提示符下,请运行以下命令:
msiexec.exe/a“Setup.msi”
有关更多详细信息,请参阅此答案:。现在检查您引用的文件是否在提取文件夹中。我们从那里开始
不匹配:源代码中的文件名与组件和文件Id不匹配,这不重要,因为您在其他地方正确引用了它,但您可能希望同步它:
:我们首先需要确定您提到的文件是否确实存在于MSI中。让我们做一个MSI的管理安装——一个美化的文件提取。在命令提示符下,请运行以下命令:
msiexec.exe/a“Setup.msi”
有关更多详细信息,请参阅此答案:。现在检查您引用的文件是否在提取文件夹中。我们从那里开始
不匹配:源代码中的文件名与组件和文件Id不匹配,这不重要,因为您在其他地方正确引用了它,但您可能希望同步它:
尝试使用L*V标志运行带有日志文件的msi。我已经这样做了,我不确定该怎么做。安装每个组件时,它表示要安装;不会修补;没有现有的文件。最后我收到消息1707(安装成功)没有回答您的问题,但是。。。。您是否检查了许可证以确保符合要求?您可能不仅仅包括Ghostscript DLL,还必须包括许可证文件,即使您自己的代码是AGPL(并且必须符合许可证要求)。您自己的代码必须在合理显眼的位置声明它使用了AGPL许可软件及其提供的许可证。是的,很好的观点@KenS-我想知道是否要链接到另外两个东西:1)
和2)
。只是一些开始思考这个问题的想法。试着用L*V标志运行带有日志文件的msi。我已经这样做了,我不知道该怎么做。安装每个组件时,它表示要安装;不会修补;没有现有的文件。最后我收到消息1707(安装成功)没有回答您的问题,但是。。。。您是否检查了许可证以确保符合要求?您可能不仅仅包括Ghostscript DLL,还必须包括许可证文件,即使您自己的代码是AGPL(并且必须符合许可证要求)。您自己的代码必须在合理显眼的位置声明它使用了AGPL许可软件及其提供的许可证。是的,很好的观点@KenS-我想知道是否要链接到另外两个东西:1)
和2)
。只是一些开始思考问题的想法。我修复了不匹配,但没有任何改变。我还运行了管理安装,出现错误2203(数据库:[2]。无法打开数据库文件。系统错误[3])。如果您还有其他问题,请尝试静默提取(以防止任何GUI问题):msiexec.exe/A MySetup.msi TARGETDIR=D:\Extract\/QN/L*V D:\Extract.log
。可能在提取过程中禁用反病毒,或者尝试在您的虚拟机上提取(如果可用)。还有一件事:@InigoMontoyaJr您在这方面运气好吗?我能够进行提取,因为该文件实际上是一个msi。我仍然有问题,所以我尝试了一个不同的pdf到图像转换库(poppler命令行工具),最终安装成功。我修复了不匹配的问题,但没有任何改变。我还运行了管理安装,出现错误2203(数据库:[2]。无法打开数据库文件。系统错误[3])。如果您还有其他问题,请尝试静默提取(以防止任何GUI问题):msiexec.exe/A MySetup.msi TARGETDIR=D:\Extract\/QN/L*V D:\Extract.log
。可能在提取过程中禁用反病毒功能,或者尝试在虚拟机上提取(如果可用)。还有一件事:@InigoMontoyaJr您在这方面运气好吗