Herhangi birinin bilmesi gerekiyorsa, Yönetici olmayan bir kullanıcı hesabından bir Windows Hizmetini Başlatma / Durdurma hakkında öğrendiğim her şeyi aşağıda bir araya getirdim.
Öncelikle, bir Windows Hizmetini Başlatmanın / Durdurmanın iki yolu vardır.
1. Oturum açma Windows kullanıcı hesabı aracılığıyla hizmete doğrudan erişim. 2. Hizmete Ağ Hizmeti hesabını kullanarak IIS aracılığıyla erişim.
Hizmetleri başlatmak / durdurmak için komut satırı komutu:
C:/> net start <SERVICE_NAME>
C:/> net stop <SERVICE_NAME>
Hizmetleri başlatmak / durdurmak için C # Kodu:
ServiceController service = new ServiceController(SERVICE_NAME);
//Start the service
if (service.Status == ServiceControllerStatus.Stopped)
{
service.Start();
service.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(10.0));
}
//Stop the service
if (service.Status == ServiceControllerStatus.Running)
{
service.Stop();
service.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(10.0));
}
Not 1:
Hizmete IIS üzerinden erişirken, bir Visual Studio C # ASP.NET Web Uygulaması oluşturun ve kodu oraya yerleştirin. Web Hizmetini IIS Kök Klasörüne (C: \ inetpub \ wwwroot \) dağıtın ve hazırsınız. URL'ye http: /// adresinden erişin.
1. Doğrudan Erişim Yöntemi
Komutu verdiğiniz veya kodu çalıştırdığınız Windows Kullanıcı Hesabı Yönetici olmayan bir hesapsa, Windows Hizmetlerini başlatma ve durdurma yeteneğine sahip olması için söz konusu kullanıcı hesabının ayrıcalıklarını ayarlamanız gerekir. Bunu nasıl yapıyorsun.
Hizmeti Başlatmak / Durdurmak istediğiniz Yönetici olmayan hesaba sahip bilgisayarda bir Yönetici hesabında oturum açın. Komut istemini açın ve aşağıdaki komutu verin:
C:/>sc sdshow <SERVICE_NAME>
Bunun çıktısı şu şekilde olacaktır:
D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
Bu bilgisayardaki her bir Kullanıcının / Grubun ilgili tüm izinlerini listeler.
A description of one part of above command is as follows:
D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)
It has the default owner, default group, and it has the Security descriptor control flags (A;;CCLCSWRPWPDTLOCRRC;;;SY):
ace_type - "A": ACCESS_ALLOWED_ACE_TYPE,
ace_flags - n/a,
rights - CCLCSWRPWPDTLOCRRC, please refer to the Access Rights and Access Masks and Directory Services Access Rights
CC: ADS_RIGHT_DS_CREATE_CHILD - Create a child DS object.
LC: ADS_RIGHT_ACTRL_DS_LIST - Enumerate a DS object.
SW: ADS_RIGHT_DS_SELF - Access allowed only after validated rights checks supported by the object are performed. This flag can be used alone to perform all validated rights checks of the object or it can be combined with an identifier of a specific validated right to perform only that check.
RP: ADS_RIGHT_DS_READ_PROP - Read the properties of a DS object.
WP: ADS_RIGHT_DS_WRITE_PROP - Write properties for a DS object.
DT: ADS_RIGHT_DS_DELETE_TREE - Delete a tree of DS objects.
LO: ADS_RIGHT_DS_LIST_OBJECT - List a tree of DS objects.
CR: ADS_RIGHT_DS_CONTROL_ACCESS - Access allowed only after extended rights checks supported by the object are performed. This flag can be used alone to perform all extended rights checks on the object or it can be combined with an identifier of a specific extended right to perform only that check.
RC: READ_CONTROL - The right to read the information in the object's security descriptor, not including the information in the system access control list (SACL). (This is a Standard Access Right, please read more http://msdn.microsoft.com/en-us/library/aa379607(VS.85).aspx)
object_guid - n/a,
inherit_object_guid - n/a,
account_sid - "SY": Local system. The corresponding RID is SECURITY_LOCAL_SYSTEM_RID.
Şimdi yapmamız gereken, Windows Hizmetlerini Başlatmak / Durdurmak için uygun izinleri istediğimiz gruplara veya kullanıcılara ayarlamaktır. Bu durumda, mevcut Yönetici olmayan kullanıcının hizmeti Başlatabilmesi / Durdurmasına ihtiyacımız var, bu nedenle izinleri o kullanıcıya ayarlayacağız. Bunu yapmak için, söz konusu Windows Kullanıcı Hesabının SID'sine ihtiyacımız var. Bunu elde etmek için, Kayıt Defterini açın (Başlat> regedit) ve aşağıdaki kayıt defteri anahtarını bulun.
LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
Bunun altında, bu bilgisayardaki her kullanıcı hesabı için ayrı bir Anahtar vardır ve anahtar adı, her hesabın SID'sidir. SID genellikle S-1-5-21-2103278432-2794320136-1883075150-1000 biçimindedir. Her bir Anahtar'a tıkladığınızda, sağdaki bölmede her Anahtar için bir değer listesi göreceksiniz. "ProfileImagePath" öğesini bulun ve değerine göre SID'nin ait olduğu Kullanıcı Adını bulabilirsiniz. Örneğin, hesabın kullanıcı adı SACH ise, "ProfileImagePath" değeri "C: \ Users \ Sach" gibi bir şey olacaktır. Bu nedenle, izinleri ayarlamak istediğiniz kullanıcı hesabının SID'sini not edin.
Not2:
Burada, söz konusu Anahtarların ve değerlerinin bir listesini elde etmek için kullanılabilecek basit bir C # kod örneği.
//LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList RegistryKey
RegistryKey profileList = Registry.LocalMachine.OpenSubKey(keyName);
//Get a list of SID corresponding to each account on the computer
string[] sidList = profileList.GetSubKeyNames();
foreach (string sid in sidList)
{
//Based on above names, get 'Registry Keys' corresponding to each SID
RegistryKey profile = Registry.LocalMachine.OpenSubKey(Path.Combine(keyName, sid));
//SID
string strSID = sid;
//UserName which is represented by above SID
string strUserName = (string)profile.GetValue("ProfileImagePath");
}
Artık izinleri ayarlamak istediğimiz kullanıcı hesabının SID'sine sahip olduğumuza göre, aşağı inelim. Kullanıcı hesabının SID'sinin S-1-5-21-2103278432-2794320136-1883075150-1000 olduğunu varsayalım . [Sc sdshow] komutunun çıktısını bir metin düzenleyicisine kopyalayın. Bunun gibi görünecek:
D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
Şimdi, kopyalama (A ;; CCLCSWRPWPDTLOCRRC ;;; SY) Yukarıdaki metnin bir kısmını ve yapıştırın hemen önce S: (AU; ... Metnin bir bölümünü Sonra böyle bakmak için o kısmı değiştirin:.
(A ;; RPWPCR ;;; S-1-5-21-2103278432-2794320136-1883075150-1000)
Sonra ön tarafa sc sdset ekleyin ve yukarıdaki kısmı tırnak işaretleri içine alın. Son komutunuz aşağıdaki gibi görünmelidir:
sc sdset <SERVICE_NAME> "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;RPWPCR;;;S-1-5-21-2103278432-2794320136-1883075150-1000)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"
Şimdi bunu komut isteminizde çalıştırın ve başarılı olursa çıktıyı aşağıdaki gibi vermelidir:
[SC] SetServiceObjectSecurity SUCCESS
Şimdi gitmeye hazırız! Yönetici olmayan kullanıcı hesabınıza, hizmetinizi Başlatma / Durdurma izinleri verildi! Kullanıcı hesabına giriş yapmayı ve hizmeti Başlat / Durdur'u deneyin ve bunu yapmanıza izin vermelidir.
2. IIS Yöntemiyle Erişim
Bu durumda, oturum açma Windows kullanıcı hesabı yerine IIS kullanıcısı "Ağ Hizmetleri" ne izin vermemiz gerekir. Prosedür aynıdır, sadece komutun parametreleri değiştirilecektir. İzni "Ağ Hizmetleri" olarak ayarladığımız için, daha önce kullandığımız son sdset komutunda SID'yi "NS" dizesi ile değiştirin . Son komut şu şekilde görünmelidir:
sc sdset <SERVICE_NAME> "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;RPWPCR;;;NS)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"
Bunu bir Yönetici kullanıcı hesabından komut isteminde çalıştırın ve işte! Hizmeti, bir WebMethod kullanarak herhangi bir kullanıcı hesabından (bir Yönetici hesabı olup olmadığına bakılmaksızın) Başlatma / Durdurma iznine sahipsiniz. Nasıl yapılacağını öğrenmek için Not1'e bakın.