pc'yi uzaktan kapatma programı ama çalışmıyor :(
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- sherlockholmes
- Kıdemli Üye
- Mesajlar: 930
- Kayıt: 19 Tem 2004 09:13
pc'yi uzaktan kapatma programı ama çalışmıyor :(
selamlar ,
windows 2000 server'i uzaktan kapatmak istiyorum. windows 2000'ini kapatmak için gerekli kodlar elimde mevcut. client/server tipi bir uygulama yapıp client'tan server tarafa "kapat" bilgisi gönderdiğimde serveri'in kendisini kapatmasını sağlayacağım ama server'i açma şifresini bilmiyorum. yapacağım programı sistem yöneticisinden rica edeceğim server'e kopyalayacak. ben sadece sabahları server'in düğmesine basıyorum açılıyor akşamları giderken de direkt düğmeden kapatıyorum server'i. Ancak "bu kaptma işlemi server'e zarar verebilir" şeklinde bir şey duydum.
Server'i açtığım zaman "ctrl+alt+del tuşlarına basarak başlayın" ekranında kalıyor bahsettiğim programı servere yüklesem programım çalışır mı?
Bu durum için ne önerirsiniz?
iyi günler...
windows 2000 server'i uzaktan kapatmak istiyorum. windows 2000'ini kapatmak için gerekli kodlar elimde mevcut. client/server tipi bir uygulama yapıp client'tan server tarafa "kapat" bilgisi gönderdiğimde serveri'in kendisini kapatmasını sağlayacağım ama server'i açma şifresini bilmiyorum. yapacağım programı sistem yöneticisinden rica edeceğim server'e kopyalayacak. ben sadece sabahları server'in düğmesine basıyorum açılıyor akşamları giderken de direkt düğmeden kapatıyorum server'i. Ancak "bu kaptma işlemi server'e zarar verebilir" şeklinde bir şey duydum.
Server'i açtığım zaman "ctrl+alt+del tuşlarına basarak başlayın" ekranında kalıyor bahsettiğim programı servere yüklesem programım çalışır mı?
Bu durum için ne önerirsiniz?
iyi günler...
En son sherlockholmes tarafından 17 Eyl 2004 01:43 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
- sherlockholmes
- Kıdemli Üye
- Mesajlar: 930
- Kayıt: 19 Tem 2004 09:13
-
- Kıdemli Üye
- Mesajlar: 395
- Kayıt: 22 Tem 2004 09:15
- Konum: İzmir
- İletişim:
Selam,
Bir form yapiniz ve uzerinde bir TEdit (Edit1), iki tane de TButton (Button1,Button2) olsun. Edit e gireceğiniz '\\xxx' adli makinaya birinci buton shutdown request gonderecek, ikinci buton ise bu istegi reddedecektir. Bu kodun çalıştğı makinadaki kullanıcının kapatılacak makinada shutdwon etme yetkisi olması gerekmektedir. İşte gerekli kodlar;
Kolay gelsin,
Bir form yapiniz ve uzerinde bir TEdit (Edit1), iki tane de TButton (Button1,Button2) olsun. Edit e gireceğiniz '\\xxx' adli makinaya birinci buton shutdown request gonderecek, ikinci buton ise bu istegi reddedecektir. Bu kodun çalıştğı makinadaki kullanıcının kapatılacak makinada shutdwon etme yetkisi olması gerekmektedir. İşte gerekli kodlar;
Kod: Tümünü seç
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function ShutDown(Computer: string; Msg: string; Time: Word; Force: Boolean; Reboot: Boolean): Boolean;
var
rl: Cardinal;
hToken: Cardinal;
tkp: TOKEN_PRIVILEGES;
begin
if not OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
ShowMessage('Process token acilirken hata olustu.')
else
begin
if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid) then
begin
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
tkp.PrivilegeCount := 1;
AdjustTokenPrivileges(hToken, False, tkp, 0, nil, rl);
if GetLastError <> ERROR_SUCCESS then
ShowMessage('Process yetkileri alinirken hata olustu !!!');
end
else
ShowMessage('Yetki bilgisi bulunamadi.');
end;
Result := InitiateSystemShutdown(PChar(Computer), PChar(Msg), Time, Force, Reboot)
end;
// Shutdown baslat
procedure TForm1.Button1Click(Sender: TObject);
begin
if not ShutDown(PChar(Edit1.Text), ' bu makina 30 sn içinde kapatılacak !!!', 30, true, true) then
ShowMessage('Shutdown istegi reddedildi...');
end;
// shut down iptal
procedure TForm1.Button2Click(Sender: TObject);
begin
AbortSystemShutdown(PChar(Edit1.Text));
end;
end.
Doğan Zorlu, İzmir
------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
- sherlockholmes
- Kıdemli Üye
- Mesajlar: 930
- Kayıt: 19 Tem 2004 09:13
verdiğiniz bilgiler için teşekkürler...
kapatmak istediğim server'da kapatma yetkim yok. amacım şu server'a yerleştireceğim program benden komut bekleyecek ben "kapat" komutunu göndereceğim ve server kapanacak. merak ettiğim nokta:server "ctrl+alt+del tuşlarına basarak başlayın " ekranında iken ben "kapat" komutunu göndersem server kapanır mı?
aklıma takılan nokta şifre girilip bir oturum açılmadığı için server'e yerleştirdiğim program çalışmayacak yani gönderdiğim "kapat" komutunu alacak program başlatılmamış olacak. işte bu sorunu nasıl aşabilirim. yani programımı oturum açılmadan çalışacak şekilde nasıl konumlandırabilirim.
kapatmak istediğim server'da kapatma yetkim yok. amacım şu server'a yerleştireceğim program benden komut bekleyecek ben "kapat" komutunu göndereceğim ve server kapanacak. merak ettiğim nokta:server "ctrl+alt+del tuşlarına basarak başlayın " ekranında iken ben "kapat" komutunu göndersem server kapanır mı?
aklıma takılan nokta şifre girilip bir oturum açılmadığı için server'e yerleştirdiğim program çalışmayacak yani gönderdiğim "kapat" komutunu alacak program başlatılmamış olacak. işte bu sorunu nasıl aşabilirim. yani programımı oturum açılmadan çalışacak şekilde nasıl konumlandırabilirim.
-
- Kıdemli Üye
- Mesajlar: 395
- Kayıt: 22 Tem 2004 09:15
- Konum: İzmir
- İletişim:
Selam,
Yazmaya çalıştığınız programı iyi niyetle yazdığınıza inanarak (umarım yanılmıyorumdur) bunun için delphi programını sistem servisi olarak hazırlamanız gerektiğini söyleyebilirim. Servisler art alanda çalıştıkları için login ekranında da hazır olurlar.
Kolay gelsin,
Yazmaya çalıştığınız programı iyi niyetle yazdığınıza inanarak (umarım yanılmıyorumdur) bunun için delphi programını sistem servisi olarak hazırlamanız gerektiğini söyleyebilirim. Servisler art alanda çalıştıkları için login ekranında da hazır olurlar.
Kolay gelsin,
Doğan Zorlu, İzmir
------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
- sherlockholmes
- Kıdemli Üye
- Mesajlar: 930
- Kayıt: 19 Tem 2004 09:13
verdiğiniz bilgiler için teşekkür ederim sayın doğanzorlu. delphi de hizmet programını nasıl yazabilirim bunu biraz açabilir misiniz? ben hep normal program yazdım ve exe ye çevirdim vs.. hizmet programı sonucunda exe dosyası oluşturulabiliyor mu , hizmet programına başlarken normal programdan farklı olarak ne yapmak gerekiyor.
bu programı yazmaktaki amacımız şu: server'ı kapatırken direkt power düğmesinden kapatıyorum. bunun sisteme zarar verebileceğini öğrendim. başka bir çözüm yolu olarak böyle bir şey düşündüm.
şimdi şu düşünülebilir "o zaman admin şifresini versinler?" ama admin şifresini tek kişi biliyor onun haricinde bir kişi bilmiyor. server da başka kullanıcı ekleme fikrine pek sıcak bakmadı yöneticiler. ben de böyle bir öneri sundum onlara
bu programı yazmaktaki amacımız şu: server'ı kapatırken direkt power düğmesinden kapatıyorum. bunun sisteme zarar verebileceğini öğrendim. başka bir çözüm yolu olarak böyle bir şey düşündüm.
şimdi şu düşünülebilir "o zaman admin şifresini versinler?" ama admin şifresini tek kişi biliyor onun haricinde bir kişi bilmiyor. server da başka kullanıcı ekleme fikrine pek sıcak bakmadı yöneticiler. ben de böyle bir öneri sundum onlara
-
- Kıdemli Üye
- Mesajlar: 395
- Kayıt: 22 Tem 2004 09:15
- Konum: İzmir
- İletişim:
Selam,
Yeni bir proje oluşturuyorsunuz ve Service Application tipinde olacağını belirtiyorsunuz. Daha sonra aşağıdakine benzer bir kod oluşacak. TService1 üzerine inet bileşenlerinizi atıp gerekn kodları yazıyorsunuz. Exe olarak derliyorsunuz. Daha sonra windows\system32 içine kopyalayıp xxx.exe /install diyorsunuz. Control Panel servisler bölümünden de startup tipini otomatik yapıyorsunuz.
Yeni bir proje oluşturuyorsunuz ve Service Application tipinde olacağını belirtiyorsunuz. Daha sonra aşağıdakine benzer bir kod oluşacak. TService1 üzerine inet bileşenlerinizi atıp gerekn kodları yazıyorsunuz. Exe olarak derliyorsunuz. Daha sonra windows\system32 içine kopyalayıp xxx.exe /install diyorsunuz. Control Panel servisler bölümünden de startup tipini otomatik yapıyorsunuz.
Kod: Tümünü seç
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
ScktComp;
type
TService1 = class(TService)
ServerSocket1: TServerSocket;
procedure ServiceExecute(Sender: TService);
private
{ Private declarations }
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;
var
Service1: TService1;
implementation
{$R *.DFM}
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
Service1.Controller(CtrlCode);
end;
function TService1.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
procedure TService1.ServiceExecute(Sender: TService);
begin
while not Terminated do begin
ServiceThread.ProcessRequests(True);
// buraya thread içinde çalışacak diğer kodları yazabilirsiniz.
end;
end;
end.
Doğan Zorlu, İzmir
------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
- sherlockholmes
- Kıdemli Üye
- Mesajlar: 930
- Kayıt: 19 Tem 2004 09:13
- sherlockholmes
- Kıdemli Üye
- Mesajlar: 930
- Kayıt: 19 Tem 2004 09:13
çalıştırmayı denediğim programın kodları. şimdilik tam çalışmıyor server'dan KAPAT bilgisini gönderiyorum ama client makine kapanmıyor. client pc ye hizmet programını kapat /install ile yükledim. yükleme başarılı oldu dedi. net start kapat ile hizmeti çalıştırdım başarıyla çalıştı dedi.
server tarafında çalışan program:
client tarafında çalışan program
sorun nerede olabilir? hiçbir hata vermiyor.
service bileşenlerinin active özellikleri true.
server tarafında çalışan program:
Kod: Tümünü seç
unit server;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdUDPBase, IdUDPServer;
type
TForm1 = class(TForm)
Button1: TButton;
IdUDPServer1: TIdUDPServer;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
IdUDPServer1.Send('10.11.12.201', 1031, 'KAPAT');
end;
end.
client tarafında çalışan program
Kod: Tümünü seç
unit kapatpas;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
IdBaseComponent, IdComponent, IdUDPBase, IdUDPServer,IdSocketHandle;
type
Tkapat = class(TService)
IdUDPServer1: TIdUDPServer;
procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
private
{ Private declarations }
public
function GetServiceController: TServiceController; override;
procedure kapatpro;
{ Public declarations }
end;
var
kapat: Tkapat;
implementation
{$R *.DFM}
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
kapat.Controller(CtrlCode);
end;
function Tkapat.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
procedure Tkapat.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
c:Word;
stream : TStringStream;
begin
stream := TStringStream.Create('');
Try
stream.CopyFrom( AData, AData.Size);
if stream.DataString = 'KAPAT' then
kapatpro;
//kapatpro procedure sitedeki win2000 kapatmak ipucundan yazdım ve bilgisayarı kapatıyor tek olarak denedim.
finally
stream.Free;
end;
end;
procedure Tkapat.kapatpro;
var
tkHandle : THandle;
BufferLun,ret : DWORD;
tk,tkPrevious : TTokenPrivileges;
LID : TLargeInteger;
LUID : TLuIDAndAttributes;
versione : TOSVersionInfo;
begin
BufferLun := 1024;
ret := 0;
versione.dwOSVersionInfoSize := sizeof(versione);
GetVersionEx(versione);
if versione.dwPlatformId = VER_PLATFORM_WIN32_NT then
begin
tkHandle := GetCurrentProcess;
OpenProcessToken(tkHandle,TOKEN_ALL_ACCESS,tkHandle);
LookupPrivilegeValue(PChar(''),PChar('SeShutDownPrivilege'),LID);
LUID.Luid := LID;
LUID.Attributes := SE_PRIVILEGE_ENABLED;
tk.PrivilegeCount := 1;
tk.Privileges[0] := LUID;
AdjustTokenPrivileges(tkHandle,False,tk,BufferLun,tkPrevious,ret);
end;
ExitWindowsEx(EWX_SHUTDOWN or EWX_PowerOff,0);
end;
end.
service bileşenlerinin active özellikleri true.
- sherlockholmes
- Kıdemli Üye
- Mesajlar: 930
- Kayıt: 19 Tem 2004 09:13
Selamlar
Bugün bu service ile uğraşayaım dedim biraz denemeler yaptım ama bu service işlemlerinden direk bir exe dosya çalıştırmak mümkün mü?
yoksa sadece socket tarzı bileşenlerle dinleme mi yapıyor?
Teşekkürler.
Bugün bu service ile uğraşayaım dedim biraz denemeler yaptım ama bu service işlemlerinden direk bir exe dosya çalıştırmak mümkün mü?
yoksa sadece socket tarzı bileşenlerle dinleme mi yapıyor?
Teşekkürler.
I love my car.
Blog Yaptık
Blog Yaptık