Я пытаюсь добавить свой собственный файл справки в библиотеку справки Visual Studio 2010, используя WiX для запуска HelpLibraryManagerLauncher, который создает построитель файлов справки Sandcastle после сборки моего проекта Sandcastle.
Я использую пользовательское действие WiX QuietExec для запуска следующей команды:
HelpLibraryManagerLauncher.exe
/product "VS"
/version "100"
/locale en-us
/silent
/brandingPackage Dev10.mshc
/sourceMedia MyClassLibraryHelp.msha
Однако установщик MSI не работает со следующим:
Action 00:00:00: InstallVS2010Help.
CAQuietExec: Help Library Manager Launcher, version 1.0.0.0
CAQuietExec: Copyright c 2010, Eric Woodruff, All Rights Reserved
CAQuietExec: E-Mail: [email protected]
CAQuietExec:
CAQuietExec: Running Help Library Manager to perform the requested action. Please wait...
CAQuietExec:
CAQuietExec: ERROR: The requested operation could not be performed.
CAQuietExec: Details: The Help Library Manager returned the exit code 401: The installation of content failed. Detailed information can be found in the event log and in the installation log.
CAQuietExec: Error 0x80070191: Command line returned an error.
CAQuietExec: Error 0x80070191: CAQuietExec Failed
CustomAction InstallVS2010Help returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox)
При проверке EventLog фиксируется следующая ошибка:
An error occurred while updating local content: Microsoft.Help.CacheLib.CacheLibUnsignedInstallRefusedException: Exception of type 'Microsoft.Help.CacheLib.CacheLibUnsignedInstallRefusedException' was thrown.
at Microsoft.Help.CacheLib.DocumentationCache.VerifyAndExtractPackages(VendorName vendorName, ChangeDescription change, StatusCallback`1 statusCallback, CertificateCheckCallback certCheckCallback)
at Microsoft.Help.CacheLib.DocumentationCache.IntegrateChange(VendorName vendorName, ChangeDescription change, StatusCallback`1 statusCallback, CertificateCheckCallback certCheckCallback)
at Microsoft.Help.CacheLib.DocumentationCache.Update(VendorName vendorName, Boolean checkForOnlineUpdates, StatusCallback`1 statusCallback, CertificateCheckCallback certCheckCallback)
at Microsoft.Help.CacheLib.CacheManager.<>c__DisplayClass24.<UpdateAsync>b__23()
at Microsoft.Help.CacheLib.AsyncOperationRunner.Run(Object state)
Вот мой код WiX:
<CustomAction Id="InstallVS2010Help" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="check" />
<CustomAction Id="SetPropertiesForInstallVS2010Help"
Property="InstallVS2010Help"
Value=""HelpLibraryManagerLauncher.exe" /product "VS" /version "100" /locale en-us /silent /brandingPackage Dev10.mshc /sourceMedia MyClassLibraryHelp.msha"
Execute="immediate" />
.
.
.
<InstallExecuteSequence>
<Custom Action="SetPropertiesForInstallVS2010Help" Before="InstallInitialize">NOT INSTALLED</Custom>
<Custom Action="InstallVS2010Help" Before="InstallFinalize">(NOT INSTALLED) AND (NOT UPGRADINGPRODUCTCODE) AND (NOT REMOVE="ALL")</Custom>
<InstallExecuteSequence>
Если я запускаю HelpLibraryManagerLauncher
из командной строки, мне сообщается, что операция завершена успешно, но когда я проверяю справочную библиотеку, моя справочная библиотека не установлена.
Однако, если я удалю переключатель /silent
, появится обычное окно диспетчера справочной библиотеки, и в нем будет указана моя справочная библиотека.
Очевидно, я хочу иметь возможность автоматически устанавливать файл справки из WiX, не взаимодействуя с графическим интерфейсом диспетчера библиотек справки, но я должен что-то упустить. Разве нельзя установить файл справки молча, либо через командную строку, либо через WiX? (Тем не менее, тихое удаление через командную строку работает нормально).
CacheLibUnsignedInstallRefusedException
тоже вызывает беспокойство. Как мне заставить WiX (и мой MSI) установить мой файл справки, даже если он не подписан?
Я использую WiX v3.5.2415, Sandcastle v2.610621.1 и Sandcastle Help File Builder v1.9.1.0. Компилятор справки 2.0 и исполняемый файл HTML Help Workshop hhc, которые использует Sandcastle Help File Builder, взяты из Visual Studio 2008 SDK.
Любая помощь будет принята с благодарностью.