Удаление с помощью msiexec получает ошибку UAC, хотя у меня есть набор прав администратора

StackOverflow https://stackoverflow.com/questions/4147286

  •  30-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь построить Updater с помощью 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 не удалось», и файл журнала говорит

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

Если, однако, я запускаю CMD в качестве администратора, и введите

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

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

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

Это было полезно?

Решение

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

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

Удачи.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top