2010-07-13 97 views
0

我为大型程序创建了一个WiX安装包。安装程序包包含Visual C++ 9.0文件的合并模块。我需要包含COM DLL的合并模块。安装运行得很好。但是,我第一次运行这个程序时,发生了一些奇怪的事情。第一次调用COM DLL时,Windows安装机制开始运行。一个安装对话框弹出蓝色。它可以做一些需要做的事情,然后它消失,程序恢复正常功能。这只发生在第一次需要Visual C++合并模块的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> 

如果我猜,它看起来像图书馆正在安装Visual C++的“第一次使用;”也就是说,直到有人使用它才能完全安装该功能。我认为这是不可能的,因为AllowAdvertise的价值被设置为“不”,但我不是WiX专家。

回答

0

谢谢你的回应。检查事件查看器的提示是魔术。显然,有一个以空间开始的安装文件条目。无论出于何种原因,WiX编译器都允许这样做,并且安装程序安装了它,但是当COM组件首次启动时,系统或安装程序中的某些内容决定这不是犹太教,并且产生错误。这个特定的文件与COM注册完全无关。当我在文件名的开头删除空格时,问题就消失了。 我打算采取Mensching先生的建议,并从文件中删除广告。我使用的是其中一个WiX工具生成的代码(我不记得是哪一个),出于某种原因,它选择在COM组件上标记advertise =“yes”。我绝对不希望安装程序试图对这些COM组件进行某种运行时安装。

0

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

如果
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 

不知道,但会解决这一问题,但这些都是绝对否则丢失。

+0

谢谢你的提示。不幸的是,这并没有解决我弹出安装对话框的问题。 – 2010-07-15 13:32:17

相关问题