Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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
WIX最佳实践问题_Wix_Windows Installer_Installation - Fatal编程技术网

WIX最佳实践问题

WIX最佳实践问题,wix,windows-installer,installation,Wix,Windows Installer,Installation,下面的单个组件是否应分为两个组件 <Component Id="cmpSoftwareDLL" Guid="8401EA84-0A93-43A5-83D0-472B63418F92" Win64="$(var.MyWin64)"> <File Id="SoftwareDLL" Source="$(var.Software.TargetDir)\..\Release Obfuscated\Software.dll" KeyPath="yes" /> <Class Id

下面的单个组件是否应分为两个组件

<Component Id="cmpSoftwareDLL" Guid="8401EA84-0A93-43A5-83D0-472B63418F92" Win64="$(var.MyWin64)">
<File Id="SoftwareDLL" Source="$(var.Software.TargetDir)\..\Release Obfuscated\Software.dll" KeyPath="yes" />
<Class Id="{2593B03A-8833-43EC-8F4F-A71E35CB58E6}" Context="InprocServer32" Description="Software"
    ThreadingModel="both" ForeignServer="mscoree.dll">
    <ProgId Id="$(var.ProgId)" Description="Software" />
</Class>

<!--Writes to Registry-->
<RegistryValue Root="HKCR" Key="CLSID\{2593B03A-8833-43EC-8F4F-A71E35CB58E6}\Implemented Categories\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}" Value="" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{2593B03A-8833-43EC-8F4F-A71E35CB58E6}\InprocServer32\1.0.0.0" Name="Class" Value="Software.Addin" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{2593B03A-8833-43EC-8F4F-A71E35CB58E6}\InprocServer32\1.0.0.0" Name="Assembly" Value="Software, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{2593B03A-8833-43EC-8F4F-A71E35CB58E6}\InprocServer32\1.0.0.0" Name="RuntimeVersion" Value="v4.0.30319" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{2593B03A-8833-43EC-8F4F-A71E35CB58E6}\InprocServer32\1.0.0.0" Name="CodeBase" Value="file:///[#SoftwareDLL]" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{2593B03A-8833-43EC-8F4F-A71E35CB58E6}\InprocServer32" Name="Class" Value="Software.Addin" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{2593B03A-8833-43EC-8F4F-A71E35CB58E6}\InprocServer32" Name="Assembly" Value="Software, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{2593B03A-8833-43EC-8F4F-A71E35CB58E6}\InprocServer32" Name="RuntimeVersion" Value="v4.0.30319" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{2593B03A-8833-43EC-8F4F-A71E35CB58E6}\InprocServer32" Name="CodeBase" Value="file:///[#SoftwareDLL]" Type="string" Action="write" />

我应该在其中一个注册表设置中包含KeyPath=“yes”吗?忘记在部署的MSI文件中的任何一个上包含KeyPath=“yes”的结果是什么?如果出现Windows升级路径或类似情况,是否可以删除它们

<Component Id="cmpCustomerRegistry" Guid="BD933C43-A40A-4DBA-8645-F5E80F9134F1" Win64="$(var.MyWin64)">
<RegistryKey Root="HKLM" Key="SOFTWARE\Policies\MySoftware">
    <RegistryValue Type="integer" Name="Name1" Value =0 />
    <RegistryValue Type="string" Name="Name2" Value ="value" />
    ....
</RegistryKey>

....

在决定是否合并或拆分组件内容时,需要回答的典型核心问题有:

  • 没有这些部分,这些部分有意义吗
  • 这些部件是否需要与这些部件分开升级
  • 是否有其他指南建议拆分或合并这些部分?
例如,指导原则告诉我们要分离每个PE文件,因此每个.dll或.exe都应该接收自己的组件,即使没有所有.dll依赖项,.exe可能毫无用处。相比之下,外部.config或.manifest文件不是独立存在的,因此应该与相应的.dll或.exe文件一起放在单个组件中


我认为,如果没有COM服务器本身,COM服务器的注册表数据是毫无意义的。如果安装程序内容中没有bug,那么在不升级.dll文件的情况下,您将永远不需要升级注册表数据。没有相反的指导。因此,除非您有特殊的需要(比如能够在不注册的情况下安装COM服务器),否则请将.dll及其注册保留在单个组件中。

谢谢您。似乎有道理。