我在用C#编写的Outlook中有一个VSTO插件,它有一个显示chm帮助文件的按钮,该文件已经运行了几年,然后突然停止工作。当我单击运行以下代码的按钮时,没有任何反应,
try
{
string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase), "ema.chm");
// Show the help.
Help.ShowHelp(null, path);
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}
有没有人有什么想法可能导致这样的问题?
答案 0 :(得分:1)
我发现了两个潜在的问题。
1)您构建path
的方式并不可靠
有many ways to get a path,它们并非都是平等的。
例如,GetCallingAssembly is susceptible to JIT inlining可能会产生不同的结果
但我相信汉斯已经暗示了真正的问题
尝试使用不同的方式来构建您的路径。
例如,this way。
以下是我通常使用属性获取程序集目录中文件路径的方法示例:
private string myXMLFile()
{
string ExecutingPath = AppDomain.CurrentDomain.BaseDirectory;
return ExecutingPath + "MyFile.XML";
}
然后很容易就像这样使用它:
if (File.Exists(myXMLFile) == false) { CreateNewXMLFile(); }
XDocument Xdoc = XDocument.Load(myXMLFile);
...
Xdoc.Save(myXMLFile);
2)。出于“安全”原因,Windows可能会阻止.CHM格式 然而,它可以被解除阻塞,这导致它在某些系统上工作而在其他系统上不工作 见Windows 8 64bit can't open chm files
答案 1 :(得分:0)
如果真的没有改变,多年来工作hh.dat可能会导致错误。
hh.dat文件存储系统上所有HTMLHelp文件(* .CHM)的用户特定信息(位置,喜欢的主题,搜索历史等),如果它以某种方式被破坏,可能会导致错误
删除或重命名文件hh.dat,将系统上的所有(!)CHM窗口重置为默认设置。当您下次打开任何.chm文件时,Windows将创建新版本的hh.dat。你应该在hh.dat找到:
Windows XP:\ Documents and Settings \%username%\ Application Data \ Microsoft \ HTML Help
Windows 7:\ Users \%username%\ AppData \ Roaming \ Microsoft \ HTML Help