Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.21.43.192] |
|
Сообщ.
#1
,
|
|
|
Мой инсталлятор создает сервис и тут же его запускает. Проблема в том, что CRT/MFC по какой-то причине ставятся уже после попытки запустить сервис. Как это лечить?
Вот так я подключаю CRT/FMC <Directory Id="SystemFolder"> <?ifdef Debug?> <?define CRT80msm="Microsoft_VC80_DebugCRT_x86.msm"?> <?define policyCRT80msm="policy_8_0_Microsoft_VC80_DebugCRT_x86.msm"?> <?define MFC80msm="Microsoft_VC80_DebugMFC_x86.msm"?> <?define policyMFC80msm="policy_8_0_Microsoft_VC80_DebugMFC_x86.msm"?> <?else?> <?define CRT80msm="Microsoft_VC80_CRT_x86.msm"?> <?define policyCRT80msm="policy_8_0_Microsoft_VC80_CRT_x86.msm"?> <?define MFC80msm="Microsoft_VC80_MFC_x86.msm"?> <?define policyMFC80msm="policy_8_0_Microsoft_VC80_MFC_x86.msm"?> <?endif?> <?define MFCLOC80msm="Microsoft_VC80_MFCLOC_x86.msm"?> <?define policyMFCLOC80msm="policy_8_0_Microsoft_VC80_MFCLOC_x86.msm"?> <Merge Id="Microsoft_VC80_CRT_x86" DiskId="1" Language="0" SourceFile="$(var.Build.MergedModules)$(var.CRT80msm)"/> <Merge Id="policy_Microsoft_VC80_CRT_x86" DiskId="1" Language="0" SourceFile="$(var.Build.MergedModules)$(var.policyCRT80msm)"/> <Merge Id="Microsoft_VC80_MFC_x86" DiskId="1" Language="0" SourceFile="$(var.Build.MergedModules)$(var.MFC80msm)"/> <Merge Id="policy_Microsoft_VC80_MFC_x86" DiskId="1" Language="0" SourceFile="$(var.Build.MergedModules)$(var.policyMFC80msm)"/> <Merge Id="Microsoft_VC80_MFCLOC_x86" DiskId="1" Language="0" SourceFile="$(var.Build.MergedModules)$(var.MFCLOC80msm)"/> <Merge Id="policy_Microsoft_VC80_MFCLOC_x86" DiskId="1" Language="0" SourceFile="$(var.Build.MergedModules)$(var.policyMFCLOC80msm)"/> </Directory> <!--InstallDefault="local" AllowAdvertise="no"--> <Feature Id="MyAgent" Title="My Agent" Level="1"> <ComponentGroupRef Id="MyAgent"/> <MergeRef Id="Microsoft_VC80_CRT_x86"/> <MergeRef Id="policy_Microsoft_VC80_CRT_x86"/> <MergeRef Id="Microsoft_VC80_MFC_x86"/> <MergeRef Id="policy_Microsoft_VC80_MFC_x86"/> <MergeRef Id="Microsoft_VC80_MFCLOC_x86"/> <MergeRef Id="policy_Microsoft_VC80_MFCLOC_x86"/> </Feature> а это мой агент <Fragment Id="MyAgent"> <PropertyRef Id="WIX_ACCOUNT_LOCALSYSTEM" /> <ComponentGroup Id="MyAgent"> <Component Id="MyAgentService" Directory="INSTALLLOCATION" Guid="{D1D3E0C9-138C-4c04-B9F0-5DF29227CC64}"> <File Name="MyAgent.exe" Source="$(var.BuildDir)MyAgent.exe" KeyPath="yes" /> <?ifdef Debug ?> <ServiceInstall Id="MyAgentServiceInstall" DisplayName="$(var.Deploy.ServiceDisplayName)" Name="$(var.Deploy.ServiceName)" ErrorControl="normal" Start="demand" Type="ownProcess" Vital="yes" /> <ServiceControl Id="MyAgentServiceControl" Name="$(var.Deploy.ServiceName)" Start="install" Stop="uninstall" Remove="uninstall" Wait="yes" /> <?else?> <ServiceInstall Id="MyAgentServiceInstall" DisplayName="$(var.Deploy.ServiceDisplayName)" Name="$(var.Deploy.ServiceName)" ErrorControl="normal" Start="auto" Type="ownProcess" Vital="yes" > <util:ServiceConfig FirstFailureActionType="restart" SecondFailureActionType="restart" ThirdFailureActionType="restart" /> </ServiceInstall> <ServiceControl Id="MyAgentServiceControl" Name="$(var.Deploy.ServiceName)" Start="install" Stop="uninstall" Remove="uninstall" Wait="yes" /> <?endif?> </Component> </ComponentGroup> </Fragment> Вот как мне его заставить устанавливать CRT и MFC до запуска сервиса? Добавлено Кстати, если отключить автоматический запуск сервиса в момент установки, то установка завершается успешно и потом сервис можно запустить вручную. |
Сообщ.
#2
,
|
|
|
оказывается, црт и сервис можно вынести в две разные "фичи"... тогда, если бы можно было указать зависимость или последовательность установки фич, то это бы спасло отца русской демократии
|
Сообщ.
#3
,
|
|
|
Решение оказалось простое.
<InstallExecuteSequence> ... <InstallExecute Before="StartServices" /> ... </InstallExecuteSequence> |