먼저 윈도우가 시작되고 로그온 하기전에 실행되는 User모드 프로그램을 서비스밖에 없을것 같습니다.
윈도우서비스로 프로그램을 만들어 놓고 시작모드를 자동으로 해 놓으면
부팅된후에 로그인전에 서비스프로그램이 시작됩니다.
그런데 서비스 프로그램은 GUI가 없습니다.
로그인 화면에 프로그램을 띄우려면 그것만으로는 안되죠
여기서 "Window Station과 Desktop 그리고 Session" 에 대한 이해가 좀 필요할것 같습니다.
( 참조 http://hongyver.pe.kr/ttblog/727 )
간단히 정리하면
서비스가 실행되는 desktop은 Service-0x0-3e7$\default 이구
윈도우 로그인화면 desktop은 WinSta0\Winlogon
사용자가 로그인후 desktop은 WinSta0\Default 로써
Window Station 이나 desktop이 다르면 윈도우 핸들도 찾을 수 없고 프로그램 실행도 그냥은 안됩니다.
서비스 프로그램에서 로그온한 데스트탑에 프로그램일 실행시기려면
CreateProcess로 실행할때
STARTUPINFO 의 lpDesktop 에 desktop이름을 적어주면 됩니다.
STARTUPINFO si;
si.lpDesktop="WinSta0\\Default";
서비스에서 로그인 화면에 프로그램을 띄우는 방법에 관해서도
위와같은 방법으로 하면되지 않을까 하고 찾아
bResult := CreateProcess( nil, // No module name (use command line).
'C:\Zzang\[기술예제]\DelphiToHTML\DelphiToHTML.exe', // Command line.
nil, // Process handle not inheritable.
nil, // Thread handle not inheritable.
FALSE, // Set handle inheritance to FALSE.
0, // No creation flags.
nil, // Use parent's environment block.
nil, // Use parent's starting directory.
si, // Pointer to STARTUPINFO structure.
pi ); // Pointer to PROCESS_INFORMATION structure. )
저도 정확히 잘 모릅니다만 몇가지 참조할것 적어 봅니다.
먼저 윈도우가 시작되고 로그온 하기전에 실행되는 User모드 프로그램을 서비스밖에 없을것 같습니다.
윈도우서비스로 프로그램을 만들어 놓고 시작모드를 자동으로 해 놓으면
부팅된후에 로그인전에 서비스프로그램이 시작됩니다.
그런데 서비스 프로그램은 GUI가 없습니다.
로그인 화면에 프로그램을 띄우려면 그것만으로는 안되죠
여기서 "Window Station과 Desktop 그리고 Session" 에 대한 이해가 좀 필요할것 같습니다.
( 참조 http://hongyver.pe.kr/ttblog/727 )
간단히 정리하면
서비스가 실행되는 desktop은 Service-0x0-3e7$\default 이구
윈도우 로그인화면 desktop은 WinSta0\Winlogon
사용자가 로그인후 desktop은 WinSta0\Default 로써
Window Station 이나 desktop이 다르면 윈도우 핸들도 찾을 수 없고 프로그램 실행도 그냥은 안됩니다.
서비스 프로그램에서 로그온한 데스트탑에 프로그램일 실행시기려면
CreateProcess로 실행할때
STARTUPINFO 의 lpDesktop 에 desktop이름을 적어주면 됩니다.
STARTUPINFO si;
si.lpDesktop="WinSta0\\Default";
서비스에서 로그인 화면에 프로그램을 띄우는 방법에 관해서도
위와같은 방법으로 하면되지 않을까 하고 찾아