【发布时间】:2019-03-26 11:57:51
【问题描述】:
我为 C# windows 服务编写了 x64 windows 安装程序。 Windows 服务本身以任何 CPU 为目标。它将服务正确安装到“程序文件”。但是,卸载时,我需要删除日志目录。但是当我尝试使用 Environment 获取“程序文件”的路径时,它返回“程序文件(x86)”,因此无法找到日志目录并将其删除。我该如何解决这个问题。代码运行在 ProjectInstaller 类中,如下
try
{
string path = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\PathToLogsFolder";
logger.Info(path);
//The above line always shows Program Files (x86) instead of "Program Files"
if (Directory.Exists(path))
{
Directory.Delete(path, true);
}
else
{
logger.Info("Path does not exist:"+path);
}
}
catch (Exception e)
{
logger.Error("Failed to delete Logs directory on uninstall:" + e.Message);
logger.Error(e.StackTrace);
}
【问题讨论】:
-
你用的是什么工具?您应该能够使用 MSI 中的内置 RemoveFile 表删除文件。然后根本没有代码可写。此外,我更喜欢在卸载期间不删除日志文件,而是向用户记录如何清理或更好地记录到系统的事件日志而不是文件。如果您愿意,您可以在调试模式下登录到文件,但对于发布二进制文件不行吗?
-
谢谢斯坦。我正在使用适用于 VS 2017 的 Windows 安装程序插件。你是对的,我应该使用 RemoveFile 表。我还在卸载期间将消息写入系统事件日志,这就是我认为我得到“程序文件(x86)”而不是“程序文件”的方式。日志文件包含以前运行的信息,我无法将所有内容都放在系统事件日志中,因此我使用日志文件。但是,如果可能的话,我仍然希望解决这个问题。但我一定会查看 RemoveFiles 表
标签: c# windows-installer program-files