Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.09.2009, 20:31   #1
JOHNKZ1
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 16
По умолчанию Запуск chm файла из под сервиса

Добрый день!
У меня возникла проблема с запуском файла справки chm из под сервиса.Пробовал запускать так:
WinExec(PChar('hh '+Application.HelpFile+'::/RM_About_Welcome.htm'), SW_SHOW)
и так
ShellExecute(0, nil, PChar(Application.HelpFile), nil, PChar(ExtractFilePath(Application.H elpFile)), 1);
все эти методы работают только тогда когда программа запущенна как обычное приложение, но из под сервиса отказываются работать.
Может кто нибудь сталкивался с подобной проблемой ?
JOHNKZ1 вне форума Ответить с цитированием
Старый 16.09.2009, 21:36   #2
hinst
Новичок
Джуниор
 
Аватар для hinst
 
Регистрация: 16.09.2009
Сообщений: 4
По умолчанию

Предлагаю суперрешение: написать консольную прогу "sheller.exe", которая в качестве первого параметра получает то, что надо shell'ить. Дальше исполнять её sheller.exe my.chm
Паскаль жил, Паскаль жив, Паскаль будет жить
hinst вне форума Ответить с цитированием
Старый 16.09.2009, 21:43   #3
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

CreateProcess C:\WINDOWS\hh.exe с именем chm-файла первым параметром
пыщь
JTG вне форума Ответить с цитированием
Старый 17.09.2009, 06:12   #4
JOHNKZ1
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 16
По умолчанию

Я делал и консольную программу и CreateProcess, но все они стартуют от пользователя SYSTEM и тоже не открывают этот файл
Также я пробовал запускать CreateProcessAsUser процесс запускается в контексте безопасности текущего пользователя но тоже от пользователя SYSTEM. А вот как его запустить от текущего пользователя я пока не знаю...
JOHNKZ1 вне форума Ответить с цитированием
Старый 17.09.2009, 14:31   #5
hinst
Новичок
Джуниор
 
Аватар для hinst
 
Регистрация: 16.09.2009
Сообщений: 4
По умолчанию

Это какая операционная система вообще??
Паскаль жил, Паскаль жив, Паскаль будет жить
hinst вне форума Ответить с цитированием
Старый 17.09.2009, 14:54   #6
JOHNKZ1
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 16
По умолчанию

Windows XP and Windows Vista and Windows Server 2008
JOHNKZ1 вне форума Ответить с цитированием
Старый 18.09.2009, 16:13   #7
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Оно запускается, но на "десктопе винлогона".
Startupinfo.lpDesktop := 'winsta0\default', и/или SetThreadDesktop (вызывать до создания окон!)
пыщь
JTG вне форума Ответить с цитированием
Старый 18.09.2009, 16:33   #8
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Проблему можно решить выставив у сервиса
Код:
Interactive := True
Но это при условии что Вам не нужно обеспечить его работу когда ни один пользователь не залогинился.
s.Creator вне форума Ответить с цитированием
Старый 21.09.2009, 09:02   #9
JOHNKZ1
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 16
По умолчанию

Всем спасибо за советы... но ни один из них не работает
Сервис и так был интерактивный, все работает кроме запуска справочных файлов. И создание процесса работает, но только если запускать его не из под сервиса.. Для создания процесса я пробовал использовать пример из JEDI он запускает любой exe коме hh.exe.
Код:
procedure TfrmMain.StartApp(const App, Parameters, CurDir : TJwString);
var
  StartupInfo: {$IFDEF UNICODE}TStartupInfoW{$ELSE}TStartupInfoA{$ENDIF};
  ProcInfo : TProcessInformation;
  pEnv : Pointer;

  pCurDir,
  pCmdLine : TJwPChar;
begin
  ZeroMemory(@StartupInfo, sizeof(StartupInfo));
  StartupInfo.cb          := SizeOf(StartupInfo);
  StartupInfo.lpDesktop   := 'winsta0\default';

  CreateEnvironmentBlock(@pEnv, 0, true);

  try
    if Length(Parameters) > 0 then
      pCmdLine := TJwPChar('"'+App+'" ' + Parameters)
    else
      pCmdLine := TJwPChar('"'+App+'" ');

    pCurDir := Nil;
    if Length(CurDir) > 0 then
      pCurDir := TJwPChar(CurDir);

   if not
{$IFDEF UNICODE}CreateProcessW{$ELSE}CreateProcessA{$ENDIF}(
    TJwPChar(App),//__in_opt     LPCTSTR lpApplicationName,
    pCmdLine, //__inout_opt  LPTSTR lpCommandLine,
    nil,//__in_opt     LPSECURITY_ATTRIBUTES lpProcessAttributes,
    nil,//__in_opt     LPSECURITY_ATTRIBUTES lpThreadAttributes,
    true,//__in         BOOL bInheritHandles,
    CREATE_NEW_CONSOLE or CREATE_UNICODE_ENVIRONMENT,//__in         DWORD dwCreationFlags,
    pEnv,//__in_opt     LPVOID lpEnvironment,
    pCurDir,//__in_opt     LPCTSTR lpCurrentDirectory,
    StartupInfo,//__in         LPSTARTUPINFO lpStartupInfo,
    ProcInfo)//__out        LPPROCESS_INFORMATION lpProcessInformation
   then
   raiseLastOsError;
  finally
    DestroyEnvironmentBlock(pEnv);
  end;
  CloseHandle(ProcInfo.hProcess);
  CloseHandle(ProcInfo.hThread);

end;
вот так вызываю :

Код:
StartApp('C:\WINDOWS\hh.exe',Application.HelpFile+'::/RM_About_Welcome.htm',ExtractFileDir(ParamStr(0)));
JOHNKZ1 вне форума Ответить с цитированием
Старый 23.10.2014, 20:58   #10
Горизонт
 
Регистрация: 20.09.2012
Сообщений: 5
По умолчанию Как из приложения запустить CHM-файл

В среде Windows XP можно было установить ActiveX компонент HHopen в панель компонентов, затем использовать его методы Open и Close. В среде Windows 7 такая библиотека отсутствует!
Горизонт вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание hlp или chm HELP файла Dmitriy_ZDO Компоненты Delphi 6 12.06.2009 23:56
запуск GetForegroundWindow из под LocalSystem biohazard123 Общие вопросы .NET 0 05.03.2009 10:21
запуск сервиса и CreateProcessWithLogonW sysyman Win Api 8 22.01.2009 23:01
Как заставить открыться из под Дельфи CHM файл grenles Общие вопросы Delphi 5 09.10.2008 13:01
Запуск программы из под лоадера. BoryaPop Общие вопросы Delphi 2 11.03.2008 08:11