おそらくあなたの場合、「/ x」パラメーターを知っていれば十分です。それに関する 2 つの注意点: コマンドラインに "REBOOT=R" 部分を追加すると、より安全になります。また、ログファイルのパスを追加できます:
msiexec /x "..." /qn REBOOT=R /L*v "c:\mylogdir\mymsi.log"
第二に、「キャッシング」に何かを変更しようとしないでください。理解する必要すらない。キャッシュされたパッケージが破損すると、通常のアンインストールができなくなり、コンピューターが「サポートが必要」な状態になる可能性があります。
あなたの質問はもともと C# について話していたので.. msiexec を使用する必要はありません:
a) MsiInstallProduct() または MsiConfigureProduct() 関数で元の C/C++ API を使用します。MSDN 参照:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa370315(v=vs.85).aspx
C# でこれを使用するには、interop を使用する必要があります。
または b) Windows インストーラー オブジェクトを使用します。たとえば、この関連するケースは、stackoverflow で既に回答されています:
プログラムによる MSI パッケージのインストール
しかし、この機能を使用するには、アンインストールにも物理パッケージが必要です。少し間接的ですが、アンインストールのためのより良いコードは次のとおりです。
まず、COM オブジェクト "Microsoft Windows Installer Object Library" への参照をプロジェクトに追加します。
using WindowsInstaller;
public static class MyMsiLib
{
public static void Uninstall(string productCode)
{
Type type = Type.GetTypeFromProgID("WindowsInstaller.Installer");
Installer installer = (Installer)Activator.CreateInstance(type);
installer.UILevel=msiUILevelNone;
installer.ConfigureProduct(productCode, 0, msiInstallStateAbsent);
}
}
以前の UILevel プロパティは、必要に応じてサイレント UI レベルを決定するためにここでハードコードされています。他の物件も同様。上記のリンクに記載されている MSDN のドキュメントなどを参照してください。
もちろん、「本物のプログラマー」は「インストーラー オブジェクト」ではなくオリジナルの API を使用します :-) しかし、小さな目的であればそれで十分です。そして簡単に。