Я искал и искал множество «решений», в том числе несколько здесь, на SO, но ни один из них не работает.Невозможно проверить состояние WiX ТОЛЬКО на 'Install'
У нас есть служба Windows Topshelf, написанная на C#, для которой мне было поручено создать установщик в формате WiX .msi, который будет установлен через командную строку с учетной записью службы и паролем, переданным в качестве аргументов.
До сих пор я добавил следующие свойства:
<Property Id="SERVICEACCOUNT" Admin="yes" />
<Property Id="PASSWORD" Admin="yes" />
Затем они назначаются во время установки службы:
<ServiceInstall Id="ServiceInstaller"
Type="ownProcess"
Name="MyServiceName"
DisplayName="My Service Display Name"
Description="My Service Description"
Account="[SERVICEACCOUNT]"
Password="[PASSWORD]"
Start="auto"
ErrorControl="normal" />
<ServiceControl Id="ServiceController"
Name="MyServiceName"
Remove="both"
Stop="both"
Wait="yes" />
С Product.wxs в этом состоянии я могу успешно установить , обновить и удалить службу из командной строки:
msiexec.exe /i "C:\MyApplication.Installer.msi" SERVICEACCOUNT="domain\serviceaccount" PASSWORD="password"
N Ot снабжая ServiceAccount или ПАРОЛЬ поля по умолчанию для установки службы по LocalAccount, которые мне нужно избегать, так что я написал условие, чтобы проверить, что параметры всегда поставляются по установке:
<Condition Message="SERVICEACCOUNT and PASSWORD must be supplied">(SERVICEACCOUNT AND PASSWORD) AND NOT Installed</Condition>
Это работает - она отображает окно сообщения и завершает установку, если параметры не указаны или если .msi запускается непосредственно из двойного щелчка.
Проблема возникает при обновлении и деинсталляции, несмотря на то, что условие указывает, что только при установке «НЕ установлен» при удалении или в середине обновления появляется окно сообщения (даже если вызывается .msi из командной строки с предоставленными параметрами).
Я пробовал различные перестановки состояния от других постов я обнаружил, что сообщают об успехах, таких как:
(SERVICEACCOUNT AND PASSWORD) AND NOT (WIX_UPGRADE_DETECTED OR UPGRADINGPRODUCTCODE) AND NOT (REMOVE="ALL")
, и я также поливаю this Cheatsheet, но безрезультатно.
Может ли кто-нибудь увидеть, что я делаю неправильно или какие-либо рабочие примеры того, как получить условие для проверки ТОЛЬКО при выполнении установки? При всей логике условий ни одна из них не работает должным образом (или, по крайней мере, как я их ожидаю!)
Большое спасибо заранее.
Вы, сэр, легенда - смена «AND NOT Installed» на «OR Installed» работала отлично. Теперь я могу успешно установить и обновить из командной строки, а также удалить из командной строки или «Добавить/удалить программы». Благодаря!! – TheCodingLlama