Удаление с помощью msiexec приводит к ошибке UAC, даже если у меня установлены права администратора - PullRequest
0 голосов
/ 10 ноября 2010

Я пытаюсь создать программу обновления, используя msiexec для удаления программы, а затем установить более новую версию.
Вот мой код:

command = "/x{[uninstall string here]}";
command += "/qn+ /Le c:\\test\\msilog.txt";
ProcessStartInfo psi = new ProcessStartInfo("msiexec");
psi.Arguments = command;
//psi.UseShellExecute = true;
//psi.Verb = "runas";
Process.Start(psi);

У меня есть

<requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />

установлено в моем манифесте, и это установлено в качестве манифеста приложения. Когда я запускаю это, я получаю всплывающее окно с надписью «AppSetup fail» и файл журнала говорит

Ошибка 1730. Вы должны быть администратором, чтобы удалить это приложение. Чтобы удалить это приложение, вы можете войти в систему как администратор или обратиться за помощью в вашу группу технической поддержки.

ЕСЛИ я, однако, запускаю cmd от имени администратора и печатаю

msiexec /x{[uninstall string here]} /qn+ /Le c:\\test\\msilog.txt

Работает отлично и денди.
Что мне здесь не хватает?

(Я также попытался раскомментировать эти две строки выше, так как это был один из способов, с помощью которого я обнаружил, что он запускается от имени администратора, но затем он выдает диалоговое окно UAC перед попыткой выполнения, даже если / qn установлен.)

1 Ответ

1 голос
/ 10 ноября 2010

Для повышения эффективности процесса необходимо, чтобы пользователь одобрил его. Если бы каждый процесс мог повысить свой уровень без взаимодействия с пользователем, он бы в некоторой степени победил бы цель повышения.

Я не знаю вашего полного сценария, но если вам удастся запустить ваше средство обновления из учетной записи локальной службы, то это должно работать без взаимодействия с пользователем. Несколько способов, которые приходят на ум, - это установить службу Windows, ключ Run / RunOnce учетной записи локальной службы или использовать psexec с ключом -s. Конечно, для этого вам необходимо иметь соответствующие разрешения на клиентском компьютере.

Удачи.

* Еще одна вещь: Если вы еще не изучили этот вопрос, вы можете использовать установщик Windows для обновления вашей установки, и вам не нужно писать свой собственный «модуль обновления». Существует 3 различных типа обновлений (небольшое обновление, незначительное обновление и серьезное обновление): http://msdn.microsoft.com/en-us/library/aa370579(VS.85).aspx

Крупное обновление удаляет предыдущую версию и устанавливает более новую версию, которая наиболее похожа на ту, что вы описали, хотя в большинстве случаев более подходящими являются небольшие обновления и небольшие обновления.

...