我创建了一个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);
}
答案 0 :(得分:2)
要使用完全权限运行自定义操作,您可以确保将其计划为延迟而不进行模拟。基本上,它必须使用MSI内的msidbCustomActionTypeInScript and msidbCustomActionTypeNoImpersonate标志。
对于每个设置创作工具,这都是不同的。如果您找不到设置方法,请向我们提供有关您用于创建MSI的更多详细信息。