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
Merge 运行WiX安装后出现奇怪的安装对话框_Merge_Wix_Installation_Module - Fatal编程技术网

Merge 运行WiX安装后出现奇怪的安装对话框

Merge 运行WiX安装后出现奇怪的安装对话框,merge,wix,installation,module,Merge,Wix,Installation,Module,我已经为一个大型程序创建了一个WiX安装包。安装包包括VisualC++ 9文件的合并模块。我需要包括一个COM DLL的合并模块。安装运行正常。不过,我第一次运行这个程序时,发生了一些奇怪的事情。第一次调用COM DLL时,Windows安装机制开始运行。突然弹出一个安装对话框。它做它需要做的任何事情一段时间,然后它离开,程序恢复正常功能。这只发生在第一次需要VisualC++合并模块的COM DLL中,一旦安装程序完成,程序就继续运行而不发生意外。为什么会发生这种情况,我能做些什么来防止它?

我已经为一个大型程序创建了一个WiX安装包。安装包包括VisualC++ 9文件的合并模块。我需要包括一个COM DLL的合并模块。安装运行正常。不过,我第一次运行这个程序时,发生了一些奇怪的事情。第一次调用COM DLL时,Windows安装机制开始运行。突然弹出一个安装对话框。它做它需要做的任何事情一段时间,然后它离开,程序恢复正常功能。这只发生在第一次需要VisualC++合并模块的COM DLL中,一旦安装程序完成,程序就继续运行而不发生意外。为什么会发生这种情况,我能做些什么来防止它?以下是合并模块的WiX代码:

<DirectoryRef Id="TARGETDIR">
  <Merge Id="VCRedistCRT" SourceFile="C:\Program Files\Common Files\Merge Modules\Microsoft_VC90_CRT_x86.msm" DiskId="1" Language="0"/>
  <Merge Id="VCRedistATL" SourceFile="C:\Program Files\Common Files\Merge Modules\Microsoft_VC90_ATL_x86.msm" DiskId="1" Language="0"/>
  <Merge Id="VCRedistMFC" SourceFile="C:\Program Files\Common Files\Merge Modules\Microsoft_VC90_MFC_x86.msm" DiskId="1" Language="0"/>
  <Merge Id="VCRedistMFCLOC" SourceFile="C:\Program Files\Common Files\Merge Modules\Microsoft_VC90_MFCLOC_x86.msm" DiskId="1" Language="0"/>
  <Merge Id="VCRedistOpenMP" SourceFile="C:\Program Files\Common Files\Merge Modules\Microsoft_VC90_OpenMP_x86.msm" DiskId="1" Language="0"/>
</DirectoryRef>

<Feature Id="VCRedistCRT" Title="Visual C++ 9.0 CRT Runtime" AllowAdvertise="no" Display="hidden" Level="1">
  <MergeRef Id="VCRedistCRT"/>
</Feature>
<Feature Id="VCRedistATL" Title="Visual C++ 9.0 ATL Runtime" AllowAdvertise="no" Display="hidden" Level="1">
  <MergeRef Id="VCRedistATL"/>
</Feature>
<Feature Id="VCRedistMFC" Title="Visual C++ 9.0 MFC Runtime" AllowAdvertise="no" Display="hidden" Level="1">
  <MergeRef Id="VCRedistMFC"/>
</Feature>
<Feature Id="VCRedistMFCLOC" Title="Visual C++ 9.0 MFC LOC Runtime" AllowAdvertise="no" Display="hidden" Level="1">
  <MergeRef Id="VCRedistMFCLOC"/>
</Feature>
<Feature Id="VCRedistOpenMP" Title="Visual C++ 9.0 Open MP Runtime" AllowAdvertise="no" Display="hidden" Level="1">
  <MergeRef Id="VCRedistOpenMP"/>
</Feature>
C:\Program Files\Common Files\Merge Modules\policy_9_0_Microsoft_VC90_ATL_x86.msm
C:\Program Files\Common Files\Merge Modules\policy_9_0_Microsoft_VC90_CRT_x86.msm
C:\Program Files\Common Files\Merge Modules\policy_9_0_Microsoft_VC90_MFC_x86.msm
C:\Program Files\Common Files\Merge Modules\policy_9_0_Microsoft_VC90_MFCLOC_x86.msm


如果我必须猜测,它看起来像是在第一次使用时安装VisualC++库,也就是说,直到有人使用它之前,它才完全安装。我认为这是不可能的,因为AllowVertise值设置为“否”,但我不是WiX专家。

您还必须安装策略合并模块:

<DirectoryRef Id="TARGETDIR">
  <Merge Id="VCRedistCRT" SourceFile="C:\Program Files\Common Files\Merge Modules\Microsoft_VC90_CRT_x86.msm" DiskId="1" Language="0"/>
  <Merge Id="VCRedistATL" SourceFile="C:\Program Files\Common Files\Merge Modules\Microsoft_VC90_ATL_x86.msm" DiskId="1" Language="0"/>
  <Merge Id="VCRedistMFC" SourceFile="C:\Program Files\Common Files\Merge Modules\Microsoft_VC90_MFC_x86.msm" DiskId="1" Language="0"/>
  <Merge Id="VCRedistMFCLOC" SourceFile="C:\Program Files\Common Files\Merge Modules\Microsoft_VC90_MFCLOC_x86.msm" DiskId="1" Language="0"/>
  <Merge Id="VCRedistOpenMP" SourceFile="C:\Program Files\Common Files\Merge Modules\Microsoft_VC90_OpenMP_x86.msm" DiskId="1" Language="0"/>
</DirectoryRef>

<Feature Id="VCRedistCRT" Title="Visual C++ 9.0 CRT Runtime" AllowAdvertise="no" Display="hidden" Level="1">
  <MergeRef Id="VCRedistCRT"/>
</Feature>
<Feature Id="VCRedistATL" Title="Visual C++ 9.0 ATL Runtime" AllowAdvertise="no" Display="hidden" Level="1">
  <MergeRef Id="VCRedistATL"/>
</Feature>
<Feature Id="VCRedistMFC" Title="Visual C++ 9.0 MFC Runtime" AllowAdvertise="no" Display="hidden" Level="1">
  <MergeRef Id="VCRedistMFC"/>
</Feature>
<Feature Id="VCRedistMFCLOC" Title="Visual C++ 9.0 MFC LOC Runtime" AllowAdvertise="no" Display="hidden" Level="1">
  <MergeRef Id="VCRedistMFCLOC"/>
</Feature>
<Feature Id="VCRedistOpenMP" Title="Visual C++ 9.0 Open MP Runtime" AllowAdvertise="no" Display="hidden" Level="1">
  <MergeRef Id="VCRedistOpenMP"/>
</Feature>
C:\Program Files\Common Files\Merge Modules\policy_9_0_Microsoft_VC90_ATL_x86.msm
C:\Program Files\Common Files\Merge Modules\policy_9_0_Microsoft_VC90_CRT_x86.msm
C:\Program Files\Common Files\Merge Modules\policy_9_0_Microsoft_VC90_MFC_x86.msm
C:\Program Files\Common Files\Merge Modules\policy_9_0_Microsoft_VC90_MFCLOC_x86.msm

虽然不确定这是否能解决问题,但在其他方面,这些肯定是不存在的。

听起来你肯定有一些COM注册广告。我强烈建议不要做广告:


首先,使用Advertise=“yes”检查源代码中的任何内容。如果这不明显,则计算机上的事件日志将有一个Windows Installer事件,该事件将指向需要按需修复/安装的组件。这将大大缩小搜索范围。

感谢您的回复。检查事件查看器的技巧是魔术。显然,有一个以空格开头的安装文件条目。不管出于什么原因,WiX编译器允许这样做,安装程序也安装了它,但是当COM组件第一次启动时,系统或安装程序中的某些东西认为这不符合犹太教义,并引发了一个错误。此特定文件与COM注册完全无关。当我删除文件名开头的空格时,问题就消失了。
我将采纳门希先生的建议,把广告从档案中删除。我使用的是一个WiX工具生成的代码(我不记得是哪一个),出于某种原因,它选择在COM组件上标记advertive=“yes”。我绝对不希望安装程序试图在这些COM组件上进行某种运行时安装。

谢谢您的提示。不幸的是,这并没有解决我弹出的安装对话框的问题。