卸载程序不会删除复制的库到 VS2010 安装程序项目中的系统文件夹。

Uninstaller doesn't delete copied library to System Folder in VS2010 installer project.

我有一个 windows 桌面应用程序。我正在使用 Microsoft visual studio 2010 安装程序项目准备 msi。为了我的目的,我需要在安装过程中将某个 DLL 复制到系统文件夹中。当我 运行 安装完成后我的卸载程序时,它不会从系统文件夹中删除该库。

有没有办法做到这一点?

这是我的UnInstaller.cpp

int _tmain(int argc, _TCHAR* argv[])
{
    //WinExec("msiexec.exe /i {B49233F8-814D-432F-BE05-D6BA334A0087}", SW_SHOW);
    WinExec("msiexec.exe /i {050E4942-5DF2-4F46-B6BC-1296761DA4C1}", SW_SHOW);
}

Windows 安装程序最佳实践指出,您应该避免将共享资源安装到 windows / 系统文件夹,并且当您必须将它们标记为永久时。

如果您曾在安装程序中将该文件的属性标记为 Permanent 或 SharedLegacyFile 并安装它,则它不会被卸载。它们不是您在项目中更改的设置,也不是期望它们在系统上更改的设置,因为系统会将它们标记为不卸载。例如,如果您查看 HKLM\Software\Microsoft\Windows\CurrentVersion\SharedDlls 并且文件路径在那里,那么您不必要地将其标记为共享。