str := ExtractFileDir(Paramstr(0))+'\temp.exe';
while true do
begin
HandleTemp:=FindWindow(nil,'text');
if HandleTemp=0 then
ShellExecute(handle,'open',
pchar(str),'', nil, SW_SHOWNORMAL);
//str我用‘c:\temp\temp.exe'也没用
sleep(5000);
Windows.beep(200,200);
end;
beep这一句有执行。就是shellExcute没反应。
你的服务程序可以和桌面交互吗?在程序里,指定TService的Interactive为true,或者,在2000的服务管理里面,在“登录”页上把“允许服务与桌面交互”打勾。我的服务程序可以运行shellExecute.另外,要获取服务程序的路径好像不能用ExtractFileDir,那样得到的是系统路径.试试下面的函数:
FUNCTION GetCurrentDirEx(): ansistring;
VAR
ModuleFileName : ARRAY[0..MAX_PATH] OF Char;
BEGIN
GetModuleFileName(HInstance, @ModuleFileName[0], MAX_PATH);
//取得当前文件名
result := IncludeTrailingBackslash(ExtractFilePath (ModuleFileName)) ;
END;