2

オプションで XP 上の Windows サービスとして実行でき、デスクトップと対話できる C++ アプリがあります (はい、それが悪い習慣であることはわかっていますが、長い間使用されてきました!)

私が発見した HTML ヘルプのレトロフィットHtmlHelp()は、サービスからは機能しません。CreateProcess()を使用して hh.exe を実行しようとしましShellExecute()たが、成功しませんでした。一方、Write using の実行CreateProcessは問題なく動作するため、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 値キーを作成します。

EnableNonInteractiveUser

そして、値を 1 に設定します。

これにより、XP の対話型サービス プロセスで HTML ヘルプを表示できるようになります。

サービス プロセスが既に実行されている場合は、これが機能する前に再起動する必要がある場合があります (これを行う必要があるかどうかは、プログラム ランタイム システムが HTML ヘルプ ビューアを起動する方法によって異なります。キャッシュされた結果は、再起動するまで機能しない可能性があることを意味します)。 .)

この段階では、同じ変更が Vista、Win7、または Win8 で機能するかどうかはわかりません。

于 2012-12-27T11:55:08.287 に答える