2015-05-14 2 views
1

Я пытаюсь удалить приложение с помощью C#, используя следующий вызов:Msiexec/дп переключатель предотвращает Uninstall

msiexec.exe /x {my-product-code} /qn 

Без переключателя /qn, диалог будет появляться запрос, если вы хотите удалить. Переключатель /qn подавляет это диалоговое окно, но он также вызывает неявный «No» для результата диалога, поскольку приложение не удаляется. Если я выключу переключатель /qn, я получу диалог, как ожидалось, и если я выберу «Да», приложение удалит.

Как я могу использовать переключатель /qn, не вызывая его неявное «No»?

+0

Если вы добавили регистрацию, что говорит файл журнала перед деинсталляцией? msiexec.exe/x {my-product-code}/qn/l * v uninstall.log " – jbudreau

+1

Я подозреваю, что для удаления требуется привилегия, и ваша программа не будет повышена. Даже если он повышен, не удаляйте удаление - я бы использовал MsiConfigureProductEx(), чтобы убедиться, что вы передаете свои права на удаление. Кроме того, добавьте файл/L * v [путь в текстовый журнал] в командную строку удаления и посмотрите, что происходит. Проблема вряд ли будет подразумеваемой Нет !! – PhilDW

+0

После регистрации я обнаружил, что проблема связана с отсутствием повышенных привилегий, как сказал PhilDW. Это происходит только при использовании переключателя/qn, поскольку административное подтверждение для удаления отсутствует. Я все еще обманываю это, но теперь добавляю StartInfo.UsernName вместе с StartInfo.UseShellExecute. Спасибо за направление, это было именно то, что мне нужно. – occamsTacKnife

ответ

1

Как отмечено в замечании PhilDW, в этом вопросе возникла необходимость повысить привилегии. Несмотря на то, что я являюсь администратором, использование ключа/qn подавляет диалог подтверждения (как и ожидалось), а диалоговое окно подтверждения используется в качестве административного подтверждения того, что это нормально для удаления. Раствор был следующим:

Process process = new Process(); 
process.StartInfo.FileName = "msiexec.exe"; 
process.StartInfo.Arguments = string.Format("/x {0} /qn /l*v uninstall.log", productCode); 
process.StartInfo.UseShellExecute = true; // added to elevate privileges 
process.StartInfo.Verb = "runas"; // added to elevate privileges 
process.Start(); 
process.WaitForExit();