C# 使用提升的权限运行MSI卸载程序

C# 使用提升的权限运行MSI卸载程序,c#,windows-installer,admin,uninstallation,C#,Windows Installer,Admin,Uninstallation,我创建了一个窗口安装项目,并向主应用程序添加了一些自定义安装程序类,以便将其包含在安装项目的自定义操作部分中。我没有使用任何第三方安装程序只是简单的VisualStudio安装项目 我的应用程序有一个自定义安装程序类,在卸载函数中,我包含了一个函数,用于终止进程,并删除在程序目录中创建的额外文件。 它在WindowsXP中工作,但在7中不工作。所以我认为这与UAC有关。如何使用管理员权限强制运行卸载程序 以下是卸载程序覆盖的我的代码: public override void Uninstall

我创建了一个窗口安装项目,并向主应用程序添加了一些自定义安装程序类,以便将其包含在安装项目的自定义操作部分中。我没有使用任何第三方安装程序只是简单的VisualStudio安装项目

我的应用程序有一个自定义安装程序类,在卸载函数中,我包含了一个函数,用于终止进程,并删除在程序目录中创建的额外文件。 它在WindowsXP中工作,但在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内部的标志


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

不清楚您是否正在生成MSI,或者是否有自定义应用程序卸载您的产品。我不确定生成MSI是什么意思。我已经为我的主应用程序创建了一个安装程序类,然后作为自定义操作的一部分添加到MSI安装程序项目中。我粘贴的代码是卸载覆盖函数的一部分。这正是我要做的。我正在阅读链接,但没有指示我必须在哪里键入标志。是否在CustomActionData字段中?您使用什么创建包?Visual Studio安装项目、WiX等?Visual Studio安装项目。不过,我必须澄清一些事情。我想在管理模式下运行卸载程序,因为安装程序类中有一个自定义代码覆盖卸载程序类。我不知道您提出的解决方案是否正确。这是作为管理员运行自定义操作的正确方法。您正在使用哪个Visual Studio版本?在VS 2010中,默认情况下,自定义操作应延迟,不进行模拟。另外,您是否尝试过调试代码以查看失败的原因?我认为您提供的解决方案与我想要的不相关,因此我将问题转移到了这篇文章[链接]()