Отображение справки HTML (chm) из интерактивного сервиса на XP - PullRequest
2 голосов
/ 01 октября 2010

У меня есть приложение C ++, которое может дополнительно работать в качестве службы Windows на XP и взаимодействовать с рабочим столом (да, я знаю, что это плохая практика, но она существует уже давно!)

Переоснащение html справки, которую я обнаружил HtmlHelp() не работает из службы. Я попытался запустить hh.exe, используя CreateProcess() и ShellExecute(), но безуспешно. С другой стороны, запуск Write с использованием 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);

1 Ответ

0 голосов
/ 27 декабря 2012

Наконец-то нашел ответ на этот вопрос:

В разделе реестра:

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

Создайте новый ключ значения DWORD:

EnableNonInteractiveUser

И установить значение 1.

Это позволит интерактивному процессу обслуживания в XP отображать справку HTML.

Если ваш сервисный процесс уже запущен, вам может потребоваться перезапустить его, прежде чем это сработает (необходимость сделать это или нет зависит от того, как ваша система времени выполнения программы запускает средство просмотра справки HTML - кэшированные результаты означают, что это может работать до перезагрузки.)

На данном этапе мне неизвестно, сработает ли такое же изменение для Vista, Win7 или Win8.

...