2011-10-26 7 views
0

私はウィンドウセットアッププロジェクトを作成し、メインアプリケーションにいくつかのカスタムインストーラクラスを追加して、セットアッププロジェクトのカスタムアクションセクションに含めました。 Imサードパーティのインストーラプログラムを使用していない単純なVisual Studioのセットアッププロジェクト。特権を持つMSIアンインストーラを実行しています

私は自分のアプリケーション用のカスタムインストーラクラスを持っています。アンインストール機能では、プロセスを強制終了し、プログラムディレクトリに作成された余分なファイルを削除する関数が含まれています。 これはWindows XPでは動作しますが、7では動作しません。だから私はUACと関係があると仮定しています。管理者権限でアンインストーラを強制的に実行するにはどうすればよいですか?

ここでアンインストーラのオーバーライドのための私の私のコード:

public override void Uninstall(IDictionary savedState) 
{ 
    base.Uninstall(savedState); 
    try 
    { 
     KillProcess(); 
     DeleteAppPathFolder(); 
    } 
    catch (Exception) { } 
} 

private void KillProcess() 
{ 
    for (; ;) 
    { 
     Process[] procMain = Process.GetProcessesByName("TaskbarNotificator"); 
     if (procMain.Length > 0) 
     { 
      procMain[0].Kill(); 
     } 
     else 
      break; 
    } 
} 

private void DeleteAppPathFolder() 
{ 
    FileInfo fileInfo = new FileInfo 
     (System.Reflection.Assembly.GetExecutingAssembly().Location); 

    string sProgram = Path.Combine(fileInfo.DirectoryName, GLOBALS.APP_DIR_NAME); 

    if (Directory.Exists(sProgram)) 
     Directory.Delete(sProgram, true); 
} 
+0

MSIを作成しているかどうか、または製品をアンインストールするカスタムアプリケーションがあるかどうかは不明です。 –

+0

私はMSIを生産して何を意味するのか分かりません。私はカスタムアプリケーションの一部としてMSIインストーラプロジェクトに追加されたメインアプリケーションにインストーラクラスを作成しました。貼り付けたコードは、アンインストールオーバーライド機能の一部です。 – ArmenB

答えて

2

あなたがいない偽装で延期としてそれがスケジュールされますことを確認することができ、完全な権限で実行するカスタムアクションを作ること。基本的には、MSI内にmsidbCustomActionTypeInScript and msidbCustomActionTypeNoImpersonateフラグを使用する必要があります。

これは、セットアップオーサリングツールごとに異なります。それを設定する方法が見つからない場合は、MSIを作成するために使用しているものの詳細をお知らせください。

+0

それはまさに私がやろうとしていることです。私はリンクを読んでいますが、フラグをタイプする必要はありません。それはCustomActionDataフィールドにありますか? – ArmenB

+0

あなたはあなたのパッケージを作成するために何を使用していますか? Visual Studioのセットアッププロジェクト、WiXなど? –

+0

Visual Studioセットアッププロジェクト。私は明確にしなければならないことがあります。インストーラクラスにアンインストーラクラスをオーバーライドするカスタムコードがあるので、管理モードでアンインストールを実行したいです。提案した解決策が正しいかどうかはわかりません。 – ArmenB

関連する問題