从windows服务中调用一个外部的窗口程序。

fring_zhao 2009-07-14 06:20:39
网上搜了半天没有正确答案,
在不就是不了了之。。。
简单点说下吧。

TService1.ServiceExecute(Sender: TService);
begin
end

中执行调用外部的一个窗口程序。


ShellExecute(0,nil,'E:\demoExe.exe', nil,nil,SW_SHOW);
现象是能调用起来,但是不显示窗口,任务管理器中可以看到。
在网上查了查,
这个方法好像是肯定不行了,貌似是因为在winService中没有desktop,
需要使用windows的其他账户重新创建一个进程。

然后我就调用了这个函数

RunAsUser('ADOMAIN', 'administrator', '123', 'e:\demoExe.exe');

具体代码-----------------------------------------
procedure RunAsUser(const Domain, Username, Password, Command: string);
var
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
wDomain, wUsername, wPassword, wCommand: PWideChar;
begin
FillChar(StartupInfo, SizeOf(StartupInfo), #0);
StartupInfo.cb := SizeOf(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := SW_SHOWNORMAL;

GetMem(
wDomain,
Length(Domain) * SizeOf(WideChar) + SizeOf(WideChar));
GetMem(
wUsername,
Length(Username) * SizeOf(WideChar) + SizeOf(WideChar));
GetMem(
wPassword,
Length(Password) * SizeOf(WideChar) + SizeOf(WideChar));
GetMem(
wCommand,
Length(Command) * SizeOf(WideChar) + SizeOf(WideChar));

StringToWideChar(
Domain,
wDomain,
Length(Domain) * SizeOf(WideChar) + SizeOf(WideChar));
StringToWideChar(
Username,
wUsername,
Length(Username) * SizeOf(WideChar) + SizeOf(WideChar));
StringToWideChar(
Password,
wPassword,
Length(Password) * SizeOf(WideChar) + SizeOf(WideChar));
StringToWideChar(
Command,
wCommand,
Length(Command) * SizeOf(WideChar) + SizeOf(WideChar));

if not CreateProcessWithLogonW(
wUsername,
wDomain,
wPassword,
0,
nil,
wCommand,
0,
nil,
nil,
StartupInfo,
ProcessInfo) then RaiseLastOSError;

FreeMem(wDomain);
FreeMem(wUsername);
FreeMem(wPassword);
FreeMem(wCommand);
end;

-------------------------------------------------

但是结果是
窗口依旧没有显示出来,在任务管理器中能看到。


不知道谁成功的做过从windows service中调用外部的窗口程序。
求教各位大大了~~~

谢谢~~~~
...全文
221 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fring_zhao 2009-07-15
  • 打赏
  • 举报
回复
多谢~
gyk120 2009-07-14
  • 打赏
  • 举报
回复
LS正解,服务交互
liangpei2008 2009-07-14
  • 打赏
  • 举报
回复
把服务设置为允许服务与桌面进行交互即可

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧