小弟写了一个Delphi服务,服务的作用是定时重启、关闭某个 .exe 程序,,
用了 ShellExecute 与 WinExec('notepad.exe', SW_SHOWNORMAL) 都始终无法启动程序。请问各位大佬有什么好的办法,可以实现小弟的功能呢?
用了 ShellExecute 与 WinExec('notepad.exe', SW_SHOWNORMAL) 都始终无法启动程序。请问各位大佬有什么好的办法,可以实现小弟的功能呢?
解决方案 »
- 转义字符的问题?
- 兩個表,主外鍵關係。刪除了外鍵的數據。主鍵的表的數據也刪除了。怎么辦??
- 为什么winXP不支持OpenDialog1?只要用OpenDialog1就出错,用win2000没问题
- 周末,散分!!!
- 关于WEBBrowser的问题,怎么自动填写网页内的的表单并提交?(该表单没有submit按钮,而是用一个链接Javascript:form1.submit来提交)
- 初学delphi,学习这个调用虚拟内存的函数virtualalloc(),搞了我3个小时都没有搞出来?请大家进来看看,谢谢!
- 关于dbgrid的问题-----------在先等
- 怎样删除组件面板上的组件?
- 一个关于combobox的小问题。
- 在delphi中用什么代替vc中的this
- 求教:给家里装个监控摄像头,需要在远处网上能看到家里的情况
- delphi2010 char为何无法于VC的 CAHR大小一致。
UNICODE_STRING = record
Length: Word;
MaximumLength: Word;
Buffer: PWideChar;
end;POBJECT_ATTRIBUTES = ^OBJECT_ATTRIBUTES;
OBJECT_ATTRIBUTES = record
Length: DWORD;
RootDirectory: THANDLE;
ObjectName: PUNICODE_STRING;
Attributes: DWORD;
SecurityDescriptor: Pointer;
SecurityQualityOfService: Pointer;
end;PSECURITY_QUALITY_OF_SERVICE=^SECURITY_QUALITY_OF_SERVICE;
SECURITY_QUALITY_OF_SERVICE=packed record
Length:Cardinal;
ImpersonationLevel:Word;
ContextTrackingMode:Word;
EffectiveOnly:LongBool;
end;function CopyToken(SourceToken,DesiredAccess:Cardinal;ImpersonationLevel:Word):Cardinal;
var sqos:SECURITY_QUALITY_OF_SERVICE;oa:OBJECT_ATTRIBUTES;
begin
sqos.Length:=SizeOf(SECURITY_QUALITY_OF_SERVICE);
sqos.ImpersonationLevel:=ImpersonationLevel;
sqos.ContextTrackingMode:=0;
sqos.EffectiveOnly:=False;
FillChar(oa,SizeOf(OBJECT_ATTRIBUTES),0);
oa.Length:=SizeOf(OBJECT_ATTRIBUTES);
oa.SecurityQualityOfService:=@sqos;
NtDuplicateToken(SourceToken,DesiredAccess,@oa,False,1,@Result);
end;
function ExecuteInActiveSession(CmdLine:WideString;ResumeAfterCreation:Boolean=True;ReserveHandle:Boolean=False):PROCESS_INFORMATION;
var hMyToken,hToken,SessionId:Cardinal;SI:STARTUPINFOW;
begin
NtOpenProcessToken($FFFFFFFF,TOKEN_ALL_ACCESS,@hMyToken);
hToken:=CopyToken(hMyToken,MAXIMUM_ALLOWED,1);
NtClose(hMyToken);
SessionId:=WTSGetActiveConsoleSessionId;
NtSetInformationToken(hToken,TokenSessionId,@SessionId,4);
ZeroMemory(@SI,SizeOf(_STARTUPINFOA));
SI.cb:=SizeOf(_STARTUPINFOA);
SI.dwFlags:=STARTF_FORCEOFFFEEDBACK;
SI.lpDesktop:=PWideChar(WideString('WinSta0\Default'));
CreateProcessAsUserW(hToken,nil,PWideChar(CmdLine),nil,nil,False,4,nil,nil,SI,Result);
NtClose(hToken);
if ResumeAfterCreation then NtResumeThread(Result.hThread,nil);
if not ReserveHandle then begin
NtClose(Result.hProcess);
NtClose(Result.hThread);
end;
end;
%1notepad.exe /install /silent
net start "服务名称"程序中打开批处理 WinExec(pchar(a.bat),SW_SHOWNORMAL);
还是要设置服务与桌面交互才行
在windows vista以上交互式服务受到了阻碍