Aslından sorun direk Delphi ile ilgili bir sorun değil ama sorulacak en uygun yer bu kısım sanırım.
Soru şu;
Ağ üzerinde server makina olarak kullandığımız bir bilgisayardan kendi yazdığım bir program aracılığı ile komut gönderip client makinaya bazı işlemler yaptırıyoruz.
Herşey güzel bir şekilde çalışıyor.
Sıra client bilgisayarı kapatmaya gelince, client makinada şöyle bir uyarı:
" Şu anda bilgisayarınıza 1 -yada 2,3 vs.- kullanıcı bağlı, bilgisayarınızı kapatmanız onların bağlantısını kesecektir. Devam etmek istiyor musunuz"
gibi bir mesaj. Ne yaparımda bu mesajın çıkmasını engellerim, bir türlü bulamadım. Bu mesaj çıktığı içinde client makinaya serverden kapatamıyoruz. Microsoft Türkiye' ye mail attım ama oralı bile olmadılar.
Sanırım windows registry ayarları ile ilgili bir şey olsa gerek.
Yardım ederseniz sevinirim...
Kolay gelsin, iyi günler...
Bilgisayarınıza bir kullanıcı bağlı uyarısı...
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
siz normal shutdown yapıyorsunuz sanırım. Birde hızlı shutdown var. Uyarılara aldırmadan makinayı kapatır onu bir deneyin.
Birde client neden uyarı versinki?. Demekki paylaştırdığı dosyaları kullanan ağda başka makinalar var. Makinayı kapatmadan önce net view ile bağlı kullanıcları görüp kick'leye bilirsiniz.
Birde client neden uyarı versinki?. Demekki paylaştırdığı dosyaları kullanan ağda başka makinalar var. Makinayı kapatmadan önce net view ile bağlı kullanıcları görüp kick'leye bilirsiniz.
kullandıgım kodu buldum:
function ShutMeDown:string;
var
hToken : THandle;
tkp,p : TTokenPrivileges;
RetLen : DWord;
ExReply: LongBool;
Reply : DWord;
begin
case Win32Platform of VER_PLATFORM_WIN32_WINDOWS: //***Windows 9x/ME***//
begin
ExReply:= ExitWindowsEx(EWX_POWEROFF or EWX_SHUTDOWN or EWX_FORCE,0);
if ExReply then
Result:='Shutdown Initiated'
else
Result:='Shutdown failed with ' + IntToStr(GetLastError);
end;
VER_PLATFORM_WIN32_NT: //***Windows NT/2000/XP***//
begin
if OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hToken) then
begin
if
LookupPrivilegeValue(nil,'SeShutdownPrivilege',tkp.Privileges[0].Luid) then
begin
tkp.PrivilegeCount := 1;
tkp.Privileges[0].Attributes :=
SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,False,tkp,SizeOf(TTokenPrivileges),p,RetLen);
Reply := GetLastError;
if Reply = ERROR_SUCCESS then
begin
ExReply:= ExitWindowsEx(EWX_POWEROFF or EWX_FORCE, 0);
if ExReply then
Result:='Shutdown Initiated'
else
Result:='Shutdown failed with ' + IntToStr(GetLastError);
end;
end;
end;
end; //case bitişi
end;
end;
fonksiyonun kullanımı;
ShutMeDown;
xp makinalarda sorun yok ama 98 lerde sorun oluyor.
function ShutMeDown:string;
var
hToken : THandle;
tkp,p : TTokenPrivileges;
RetLen : DWord;
ExReply: LongBool;
Reply : DWord;
begin
case Win32Platform of VER_PLATFORM_WIN32_WINDOWS: //***Windows 9x/ME***//
begin
ExReply:= ExitWindowsEx(EWX_POWEROFF or EWX_SHUTDOWN or EWX_FORCE,0);
if ExReply then
Result:='Shutdown Initiated'
else
Result:='Shutdown failed with ' + IntToStr(GetLastError);
end;
VER_PLATFORM_WIN32_NT: //***Windows NT/2000/XP***//
begin
if OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hToken) then
begin
if
LookupPrivilegeValue(nil,'SeShutdownPrivilege',tkp.Privileges[0].Luid) then
begin
tkp.PrivilegeCount := 1;
tkp.Privileges[0].Attributes :=
SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,False,tkp,SizeOf(TTokenPrivileges),p,RetLen);
Reply := GetLastError;
if Reply = ERROR_SUCCESS then
begin
ExReply:= ExitWindowsEx(EWX_POWEROFF or EWX_FORCE, 0);
if ExReply then
Result:='Shutdown Initiated'
else
Result:='Shutdown failed with ' + IntToStr(GetLastError);
end;
end;
end;
end; //case bitişi
end;
end;
fonksiyonun kullanımı;
ShutMeDown;
xp makinalarda sorun yok ama 98 lerde sorun oluyor.
http://groups.google.com.tr/group/uned. ... 0008be4fef
bu adreste değişik yöntemler tartışılmış. Eğer sistem 9x ise zaten böyle bir özelllik yok.
bu adreste değişik yöntemler tartışılmış. Eğer sistem 9x ise zaten böyle bir özelllik yok.