簡體   English   中英

使用提升的權限運行MSI卸載程序

[英]Running MSI uninstaller with elevated privilege

我創建了一個Window Setup Project,並在主應用程序中添加了一些自定義安裝程序類,因此將其包含在Setup Project的Custom Action部分中。 我沒有使用任何第三方安裝程序只是簡單的Visual Studio安裝項目。

我有我的應用程序的自定義安裝程序類,在卸載函數中,我已經包含了一個函數來終止進程,並刪除在程序目錄中創建的額外文件。 它適用於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);
}

要使用完全權限運行自定義操作,您可以確保將其計划為延遲而不進行模擬。 基本上,它必須使用MSI中的msidbCustomActionTypeInScript和msidbCustomActionTypeNoImpersonate標志。

對於每個設置創作工具,這都是不同的。 如果您找不到設置方法,請向我們提供有關您用於創建MSI的更多詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM