2010-07-13 1 views
0

Я создал установочный пакет WiX для большой программы. Пакет установки включает в себя модули слияния для файлов Visual C++ 9.0. Мне нужно включить модули слияния для COM DLL. Установка выполняется просто отлично. При первом запуске программы происходит нечто странное. При первом вызове COM DLL запускается механизм установки Windows. Диалог установки появляется неожиданно. Он делает то, что ему нужно сделать в течение некоторого времени, затем он уходит, и программа возобновляет свою обычную функцию. Это происходит только в первый раз, когда COM DLL нуждается в модулях слияния Visual C++, и после завершения установки программа продолжает работать без инцидентов. Почему это происходит, и что я могу сделать, чтобы предотвратить это? Вот код WiX для модулей слияния:Диалоговое окно Bizarre Installing после запуска установки 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. Когда я удалил пробел в начале имени файла, проблема исчезла. Я собираюсь взять совет мистера Меншига и удалить рекламу из файла. Я использовал код, созданный одним из инструментов WiX (я не помню, какой), и по какой-то причине он решил пометить рекламу = «да» на COM-компонентах. Я определенно не хочу, чтобы установщик пытался выполнить некоторую установку во время выполнения этих компонентов 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

Благодарим за отзыв. К сожалению, это не решило мою проблему при появлении диалогового окна установки. –

2

Это определенно звучит так, как будто вы зарегистрировали рекламу COM. Я настоятельно рекомендую не рекламировать: http://robmensching.com/blog/archive/2007/03/12/RobMens-Recommendation-Do-not-advertise-COM-information-in-MSI.aspx.

Прежде всего, проверьте исходный код на что-либо, с объявлением = «да». Если это не очевидно, в Журнале событий на компьютере будет установлено событие установщика Windows, которое укажет на компонент, требующий ремонта/установки по требованию. Это должно значительно сузить поиск.