【发布时间】:2011-12-16 02:09:34
【问题描述】:
我创建了一个窗口设置项目,并向主应用程序添加了一些自定义安装程序类,以便将其包含在设置项目的自定义操作部分中。我没有使用任何第三方安装程序,只是普通的 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 还是有自定义应用程序可以卸载您的产品。
-
我不确定您所说的生成 MSI 是什么意思。我已经为我的主应用程序创建了一个安装程序类,然后将其作为自定义操作的一部分添加到 MSI 安装程序项目中。我粘贴的代码是卸载覆盖功能的一部分。
标签: c# windows-installer admin uninstallation