Запуск программы удаления MSI с повышенными привилегиями - PullRequest
0 голосов
/ 27 октября 2011

Я создал проект установки окна и добавил несколько пользовательских классов установщика в основные приложения, чтобы включить его в раздел «Настраиваемые действия» проекта установки.Я не использую какую-либо стороннюю программу установки, просто простой проект установки Visual Studio.

У меня есть собственный класс установщика для моего приложения, и в функцию удаления я включил функцию, чтобы убить процесс и удалить дополнительные файлысозданный в каталоге программы.Это работает в Windows XP, но не в 7. Так что я предполагаю, что это связано с UAC.Как я могу принудительно запустить деинсталлятор с правами администратора?

вот мой мой код для переопределения деинсталлятора:

public override void Uninstall(IDictionary savedState)
{
    base.Uninstall(savedState);
    try
    {
       KillProcess();
       DeleteAppPathFolder();
    }
    catch (Exception) { }
}

private void KillProcess()
{
    for (; ; )
    {
        Process[] procMain = Process.GetProcessesByName("TaskbarNotificator");
        if (procMain.Length > 0)
        {
            procMain[0].Kill();
        }
        else
            break; 
    }
}

private void DeleteAppPathFolder()
{
    FileInfo fileInfo = new FileInfo
        (System.Reflection.Assembly.GetExecutingAssembly().Location);

    string sProgram = Path.Combine(fileInfo.DirectoryName, GLOBALS.APP_DIR_NAME);

    if (Directory.Exists(sProgram))
        Directory.Delete(sProgram, true);
}

1 Ответ

2 голосов
/ 27 октября 2011

Чтобы выполнить настраиваемое действие с полными привилегиями, вы можете убедиться, что оно запланировано как отложенное без подражания.По сути, он должен использовать флаги msidbCustomActionTypeInScript и msidbCustomActionTypeNoImpersonate внутри MSI.

Это делается по-разному для каждого инструмента разработки настроек.Если вы не можете найти способ установить его, сообщите нам более подробную информацию о том, что вы используете для создания MSI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...