各位,为什么我做的NT服务程序,在安装时提示“帐户名不存在或密码错误!”(50分)

  • 主题发起人 jxhdy2001
  • 开始时间
J

jxhdy2001

Unregistered / Unconfirmed
GUEST, unregistred user!
各位,为什么我做的NT服务程序,在安装时提示“帐户名不存在或密码错误!”我用的是超级用户?
请问这个是什么问题?在线等候!!!
 
要在程序中设置进程的权限。

参考以下关机权限的设置:

2. 如何在WIN2000中获取SE_SHUTDOWN_NAME权限
procedure ExitWindowsNT(uFlags : integer);
var
hToken : THANDLE;
tkp, tkDumb : TTokenPrivileges;
DumbInt : integer;
begin
FillChar(tkp, sizeof(tkp), 0);
// Get a token for this process
if not (OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES
or TOKEN_QUERY, hToken)) then
raise Exception.create('OpenProcessToken failed with code '
+ inttostr(GetLastError));

// Get the LUID for the Shutdown privilege
LookupPrivilegeValue(nil, pchar('SeShutdownPrivilege'),
tkp.Privileges[0].Luid);

tkp.PrivilegeCount := 1; // one privilege to set
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;

// Get the shutdown provolege for this process
AdjustTokenPrivileges(hToken, false, tkp, sizeof(tkDumb), tkDumb, DumbInt);

// Cannot test the return value of AdjustTokenPrivileges
if GetLastError <> ERROR_SUCCESS then
Raise Exception.create('AdjustTokenPrivileges failed with code '
+ inttostr(GetLastError));

// shut down the system and for all applications to close
if not ExitWindowsEx(uFlags, 0) then
Raise Exception.create('ExitWindowsEx failed with code '
+ inttostr(GetLastError));
end;

调用方法:
ExitWindowsNT(EWX_SHUTDOWN or EWX_FORCE)
ExitWindowsNT(EWX_REBOOT)等等

 
to jsxjd:
你好!这个过程是在OnCreate事件中调用吗?
 
设置InterActive 为True就可以了!!
 
谢谢fdwangchao!!!
jsxjd兄弟,给的是在Win2K中的关机的程序吧!
问题解决了!
 
顶部