Я создал MSI Setup с WiX, используя WixSharp.Он включает в себя несколько пользовательских действий.Например, во время установки я выполняю некоторые командные файлы, которые устанавливают и запускают службу.И во время удаления он должен остановить и удалить службу снова.
var dir = new InstallDir(@"%ProgramFiles%\MyCompany\MyProduct",
new Files(@"..\..\..\AllMyFiles\*.*"));
var project = new Project("MyProduct", dir) {
GUID = new Guid("7f22db65-2b23-4df2-b2b2-495f2d369c3d"),
Version = new Version(1, 0, 0, 0),
UI = WUI.WixUI_InstallDir,
Platform = Platform.x64
};
project.Actions = new WixSharp.Action[] {
new ElevatedManagedAction(CustomActions.InstallService,Return.check, When.Before, Step.InstallFinalize, Condition.NOT_Installed),
new ElevatedManagedAction(CustomActions.StartService,Return.check, When.After, Step.PreviousAction, Condition.NOT_Installed),
new ElevatedManagedAction(CustomActions.StopService,Return.check, When.Before, Step.RemoveFiles, Condition.Installed),
new ElevatedManagedAction(CustomActions.UninstallService,Return.check, When.After, Step.PreviousAction, Condition.Installed)
};
Теперь вот важная часть.Мне нужно выполнить командный файл во время установки и удаления, который находится где-то в INSTALLDIR:
[CustomAction]
public static ActionResult StartService(Session session) {
string installDir = session.Property("INSTALLDIR"); //<--this works on install even when using a custom path
string workingDir = Path.Combine(installDir, @"\SomePathToTheBatchFile");
RunCmdMethode(workingDir, "something.bat -some arguments");
return ActionResult.Success;
}
[CustomAction]
public static ActionResult UninstallService(Session session) {
string installDir = session.Property("INSTALLDIR"); //<--this does not give back the right path on uninstall in case the default path was changed during installation
string workingDir = Path.Combine(installDir, @"\SomePathToTheBatchFile");
RunCmdMethode(workingDir, "something.bat -some arguments");
return ActionResult.Success;
}
Все идет гладко при использовании пути по умолчанию для установки.Но если я изменяю путь установки по умолчанию во время установки на какой-либо другой путь, то шаг установки правильно находит .bat и выполняет его, но во время удаления он ищет файл .bat в папке по умолчанию.Хотя Деинсталлятор правильно удаляет файлы в нужном месте.Таким образом, пользовательский путь установки должен быть где-то сохранен.Как мне получить к нему доступ?