C# 使用提升的权限运行MSI卸载程序
我创建了一个窗口安装项目,并向主应用程序添加了一些自定义安装程序类,以便将其包含在安装项目的自定义操作部分中。我没有使用任何第三方安装程序只是简单的VisualStudio安装项目 我的应用程序有一个自定义安装程序类,在卸载函数中,我包含了一个函数,用于终止进程,并删除在程序目录中创建的额外文件。 它在WindowsXP中工作,但在7中不工作。所以我认为这与UAC有关。如何使用管理员权限强制运行卸载程序 以下是卸载程序覆盖的我的代码:C# 使用提升的权限运行MSI卸载程序,c#,windows-installer,admin,uninstallation,C#,Windows Installer,Admin,Uninstallation,我创建了一个窗口安装项目,并向主应用程序添加了一些自定义安装程序类,以便将其包含在安装项目的自定义操作部分中。我没有使用任何第三方安装程序只是简单的VisualStudio安装项目 我的应用程序有一个自定义安装程序类,在卸载函数中,我包含了一个函数,用于终止进程,并删除在程序目录中创建的额外文件。 它在WindowsXP中工作,但在7中不工作。所以我认为这与UAC有关。如何使用管理员权限强制运行卸载程序 以下是卸载程序覆盖的我的代码: public override void Uninstall
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中,默认情况下,自定义操作应延迟,不进行模拟。另外,您是否尝试过调试代码以查看失败的原因?我认为您提供的解决方案与我想要的不相关,因此我将问题转移到了这篇文章[链接]()