2

我有一个 C++ 应用程序,可以选择在 XP 上作为 Windows 服务运行并与桌面交互(是的,我知道这是不好的做法,但它已经存在了很长时间!)

我发现对它进行改造的 html 帮助在HtmlHelp()服务中不起作用。我试过使用 hh.exe 运行CreateProcess()ShellExecute()但没有成功。另一方面,运行Write usingCreateProcess工作正常,所以hh.exe 肯定有一些不同。再多的谷歌搜索也没有发现任何线索。如何从服务中启动 chm 文件?

PROCESS_INFORMATION ProcInfo;
STARTUPINFO si;
memset(&si, '\0', sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
//si.lpDesktop = "winsta0\\default"; // <-- doesn't make any difference
char *helpcmd = "hh.exe c:\\help\myhelpfile.chm";
BOOL bSuccess = ::CreateProcess(NULL, helpcmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &ProcInfo);
4

1 回答 1

0

终于找到了这个问题的答案:

在注册表项下:

HKLM\SOFTWARE\Microsoft\HTMLHelp\1.x\HHRestrictions

创建一个新的 DWORD 值键:

启用非交互式用户

并将值设置为 1。

这将允许 XP 上的交互式服务进程显示 HTML 帮助。

如果您的服务进程已经在运行,您可能需要在此工作之前重新启动它(是否需要这样做取决于您的程序运行时系统如何启动 HTML 帮助查看器 - 缓存的结果意味着它可能在重新启动之前无法工作.)

在这个阶段,我不知道相同的更改是否适用于 Vista、Win7 或 Win8。

于 2012-12-27T11:55:08.287 回答