Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 包括WiX安装程序的dll文件_C#_Winforms_Dll_Wix_Ghostscript - Fatal编程技术网

C# 包括WiX安装程序的dll文件

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

我制作了一个利用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:

<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您在这方面运气好吗