使用提升的权限运行MSI安装程序

时间:2011-10-26 21:34:09

标签: c# windows-installer admin uninstall

我创建了一个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);
}

1 个答案:

答案 0 :(得分:2)

要使用完全权限运行自定义操作,您可以确保将其计划为延迟而不进行模拟。基本上,它必须使用MSI内的msidbCustomActionTypeInScript and msidbCustomActionTypeNoImpersonate标志。

对于每个设置创作工具,这都是不同的。如果您找不到设置方法,请向我们提供有关您用于创建MSI的更多详细信息。