Ответ 1
В интересах любого, кто ищет ответ на эти проблемы:
Служба не останавливается перед удалением
Пока не найдено решение.
Папка установки не удалена после удаления
Метод OnAfterUninstall в установщике проекта должен быть переопределен, и любые созданные файлы должны быть удалены. Папка установщика приложения автоматически удаляется, если после этого не будет файлов.
protected override void OnAfterUninstall(IDictionary savedState)
{
base.OnAfterUninstall(savedState);
string targetDir = Context.Parameters["TargetDir"]; // Must be passed in as a parameter
if (targetDir.EndsWith("|"))
targetDir = targetDir.Substring(0, targetDir.Length-1);
if (!targetDir.EndsWith("\\"))
targetDir += "\\";
if (!Directory.Exists(targetDir))
{
Debug.WriteLine("Target dir does not exist: " + targetDir);
return;
}
string[] files = new[] { "File1.txt", "File2.tmp", "File3.doc" };
string[] dirs = new[] { "Logs", "Temp" };
foreach (string f in files)
{
string path = Path.Combine(targetDir, f);
if (File.Exists(path))
File.Delete(path);
}
foreach (string d in dirs)
{
string path = Path.Combine(targetDir, d);
if (Directory.Exists(d))
Directory.Delete(d, true);
}
// At this point, all generated files and directories must be deleted.
// The installation folder will be removed automatically.
}
Помните, что папка установки должна быть передана как параметр:
- Щелкните правой кнопкой мыши на проекте настройки, затем выберите "Вид" → "Пользовательские действия"
- Пользовательские действия откроются в главном окне. Щелкните правой кнопкой мыши "Первичный вывод из XXX" в разделе "Удалить" node и выберите "Окно свойств"
- В окне свойств в разделе CustomActionData введите следующее:/TargetDir = "[TARGETDIR] |" (обратите внимание на трубку в конце, не удаляйте ее).
Это приведет к установке папки установки в качестве параметра в вашу процедуру удаления, чтобы вы знали, где было установлено приложение, и можете удалить созданные файлы и папки.