Команда удаления завершается сбоем только в режиме выпуска

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

  •  09-06-2019
  •  | 
  •  

Вопрос

Я могу успешно удалить стороннее приложение через командную строку и с помощью специального установщика Inno Setup.

Командная строка Выполнение:

MSIEXEC.exe /x {14D74337-01C2-4F8F-B44B-67FC613E5B1F} /qn

Команда настройки Inno:

[Run]
Filename: msiexec.exe; Flags: runhidden waituntilterminated; 
Parameters: "/x {{14D74337-01C2-4F8F-B44B-67FC613E5B1F} /qn";
StatusMsg: "Uninstalling Service...";

Я также могу удалить приложение программно при выполнении следующего кода C# в режиме отладки.

Код С#:

string fileName = "MSIEXEC.exe";
string arguments = "/x {14D74337-01C2-4F8F-B44B-67FC613E5B1F} /qn";

ProcessStartInfo psi = new ProcessStartInfo(fileName, arguments)
{
    CreateNoWindow = true,
    UseShellExecute = false,
    RedirectStandardOutput = true
};

Process process = Process.Start(psi);
string errorMsg = process.StandardOutput.ReadToEnd();
process.WaitForExit();

Однако тот же код C# выдает следующий вывод об ошибке при запуске в качестве скомпилированной развернутой службы Windows:

"This action is only valid for products that are currently installed."

Дополнительные комментарии:

  • Служба Windows, которая выдает команду удаления, работает на той же машине, что и код, тестируемый в режиме отладки.Служба Windows работает/вошла в систему в качестве учетной записи локальной системы.
  • Я консультировался с журналами приложений, и я подтвердил, что выполненные аргументы команды одинаковы как в режиме отладки, так и в режиме выпуска.
  • Я консультировался с зрителем событий, но это не предлагает никаких подсказок.

Мысли?Любая помощь будет принята с благодарностью.Спасибо.

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

Решение 3

Спасибо тем, кто предлагает помощь.Похоже, это проблема с разрешениями.Я обновил свою службу для работы под учетной записью администратора, и она смогла успешно удалить стороннее приложение.По мнению Ориона, хотя учетная запись «Локальная система» — это мощная учетная запись, имеющая полный доступ к системе… http://technet.microsoft.com/en-us/library/cc782435.aspx -- Кажется, у него нет необходимых прав для удаления.

[См. дополнительные комментарии для получения полной информации о возможности LocalSystem удалить приложение, для которого оно установлено.]

Другие советы

Шаг 1: Проверьте файлы журнала ошибок MSI.

Я подозреваю, что ваша проблема связана с работой от имени LocalSystem.

Учетная запись локальной системы — это не то же самое, что обычная учетная запись пользователя, имеющая права администратора.Он не имеет доступа к сети, а его взаимодействие с реестром и файловой системой совсем другое.

Из памяти любые запросы на чтение/запись в ваш «домашний каталог» или HKCU в реестре фактически переходят либо в профиль пользователя по умолчанию, либо, в случае временных каталогов, c:\windows\temp

Раньше я сталкивался с подобными проблемами при установке: клиент использовал для установки учетную запись СИСТЕМА, и это вызывало всевозможные проблемы с разрешениями для пользователей, не являющихся администраторами.

Файлы журнала MSI на самом деле не помогут, если приложение не отображается как «установленное». Я бы предложил начать с записи вывода MSIINV.EXE под системной учетной записью вы получите «Инвентаризацию» установленных на данный момент программ (или того, что этот пользователь видит установленным) http://blogs.msdn.com/brada/archive/2005/06/24/432209.aspx

Я думаю, вам, вероятно, нужно вернуться к чертежной доске и посмотреть, действительно ли вам нужна служба Windows для удаления.Вероятно, вы столкнетесь со всевозможными проблемами UAC в Vista, если еще этого не сделали...

Это странно.LocalSystem определенно имеет права на установку приложений (именно так работают Центр обновления Windows и развертывание программного обеспечения в Active Directory), поэтому у него также должна быть возможность удалить.

Возможно, приложение изначально устанавливается для каждого пользователя, а не для каждого компьютера?

@Пол Лалонд

Установщик приложения заключен в специальный установщик InnoSetup.Установщик InnoSetup, в свою очередь, запускается вручную вошедшим в систему пользователем.Тем не менее, удаление запускается службой, работающей под учетной записью локальной системы.

Судя по всему, вы что-то задумали.Я провел быстрый тест, в ходе которого служба работала под учетной записью LocalSystem, а также удаляла приложение, и все работало безупречно.Вы были правы.Учетной записи LocalSystem необходимы разрешения на удаление приложений, в которых она устанавливается.Вы спасли положение.Спасибо за ответ!

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