WMI "Access is Denied" hatası !!!

gulcanerdal

Öğrenci
Katılım
13 Ağustos 2012
Mesajlar
6
Reaksiyon puanı
0
Puanları
0
Meraba arkadaşlar.

Remote Process ile ilgili bir proje yapıyorum. Uzaktaki bir makinenin processlerine erişip, kill etmek istiyorum. WMI ile yapmaya calısyorum. Localde yazdıgın kodalrda sorun yok. Sorunsuz çalışıyorlar. Lakin uzak makineye bağlanırken "RPC sunucusu kullanılamıyor. (HRESULT özel durum döndürdü: 0x800706BA)" hatası alıyorum. 1 haftadır ugrasıyorum , hala bulamadım.

Çalısan processleri getirmeye çalıştıgım fonksiyon ise aşağıda;


public static DataTable remoteProcessGetir(string kAdi, string kSifre, string IP)
{
ConnectionOptions op = new ConnectionOptions();
op.Username = kAdi;
op.Password = kSifre;
op.Impersonation = ImpersonationLevel.Impersonate;
op.Authentication = AuthenticationLevel.PacketPrivacy;

ManagementScope scp = new ManagementScope(@"\\" + IP + @"\root\cimv2", op);
ObjectQuery q = new ObjectQuery("select * from Win32_Process");
ManagementObjectSearcher search = new ManagementObjectSearcher(scp, q);
ManagementObjectCollection process = search.Get(); // hatayı bu satırda alıyorum.

DataTable t = new DataTable();

t.Columns.Add("Ad", Type.GetType("System.String"));
t.Columns.Add("ProcessId", Type.GetType("System.Int32"));
t.Columns.Add("Açıklama", Type.GetType("System.String"));
t.Columns.Add("Yol", Type.GetType("System.String"));

foreach (ManagementBaseObject obj in process)
{
DataRow row = t.NewRow();
row["Ad"] = obj["Name"].ToString();
row["ProcessId"] = Convert.ToInt32(obj["ProcessId"]);
if (obj["Caption"] != null)
row["Açıklama"] = obj["Caption"].ToString();
if (obj["ExecutablePath"] != null)
row["Yol"] = obj["ExecutablePath"].ToString();
t.Rows.Add(row);

}

return t;

}

Çok örnek inceledim. Hala nerden kaynaklı bulamadım. . yardımlarınız için şimdiden çok tşkkür ederim.
 

kizanlik

Asistan
Katılım
25 Mart 2012
Mesajlar
250
Reaksiyon puanı
0
Puanları
0
Firewall problem yaratiyor olabilir.

TCP 135 RPC portu. Her iki tarafta da acik olmali.

Fakat

Baglanilan yere birden fazla RPC gelebileceginden 1024 - 65535 arasinin da acik olmasi gerekiyor.

Server, 135 ile istegi gonderiyor.
Client, 135 ile istegi aliyor.
Client, yukaridaki araliktan rastgele sectigi bir port uzerinden konusmaya devam ediyor.

Yerinde olsam, calisip calismadigina emin olmak icik (uzakta), tum firewall v.b. yazilimi/donanimi devre disi birakirdim.

Teker teker acip, deneyerek sorunun nereden kaynaklandigini bulurdum.
 

gulcanerdal

Öğrenci
Katılım
13 Ağustos 2012
Mesajlar
6
Reaksiyon puanı
0
Puanları
0
Evet dün yazdıktan sonra firewall kapatıp, hatta daha sonra kapatmayıp sadece WMI izin verdikten sonra sorun çözülmüştü. Ama baska bilgisayarda deneme yaptıgım zaman dediklerinin kesinlikle deneyeceğim. Çok teşekkür ederim Bir sorum daha olacak. WMI ile belirli bir exeyi mesela masaaüstündeki deneme.txt 'i kill yada run edebiliyor muyuz? Baktım ama hiç rast gelmedim. Bir bilgin var mı?
 

gulcanerdal

Öğrenci
Katılım
13 Ağustos 2012
Mesajlar
6
Reaksiyon puanı
0
Puanları
0
Teşekkür ederm. Ama benim istediğim yalnızca txt dosyaı değil. masaüstndeki deneme.html ya da belgelerimdeki başka bir exe. bir path vererek yapılacak sanırım. Ya da yapılamıyor mı WMI ile? Ekrandan dosyayolu almak lazım sanırm da. İşte kodu nasıl olcak bilmiyorum. İnternette baktımalrımın hepsi varolmayan bir txt yada chome vs. gibi processleri çalıstırmak ile ilgiliyli. Varolanı calıstırmak ile ilgili bulamadım. Bi bilgin var mı?

Çok teşekkür ederim tekrardan.
 

kizanlik

Asistan
Katılım
25 Mart 2012
Mesajlar
250
Reaksiyon puanı
0
Puanları
0
Ustunden cok zaman gecti (Win98/ME).
Sunu buldum:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa379187(v=vs.85).aspx

Serialization var miydi hatirlamiyorum ama su anda varmis.
Dosyayi binary okuyup (byte array) serialization call serviceten de faydalanirsan olur gibi geliyor.

Serialization konusu genel olarak iyi bir konu. XmlSerializer ve DataContractSerializer (ozellikle de bunu) arastir bence.
 

gulcanerdal

Öğrenci
Katılım
13 Ağustos 2012
Mesajlar
6
Reaksiyon puanı
0
Puanları
0
Merhaba arkadaşlar;

Kaç gündür bu hata ile ugrasıyorum. Forumlarda bulabildiğim her yolu denedim. Lakin bi sonuç alamadım.

Remote Process, WMI ile uzaktaki bir makinenin bir processini çalıştırmak istiyorum.
Kodum şu şekildedir:

public static void remoteCreateProcess(string kAdi, string kSifre, string IP)
{
ConnectionOptions opp = new ConnectionOptions();
opp.Password = kAdi;
opp.Username = kSifre;
opp.Impersonation = ImpersonationLevel.Impersonate;
opp.EnablePrivileges = true;
opp.Authentication = AuthenticationLevel.PacketPrivacy;
ManagementScope scp = new ManagementScope(@"\\" + IP + @"\root\cimv2", opp);
scp.Connect(); //hatayı burda veriyor.
string exeName = @"\\"+IP+@"\c$\denemem.txt";
ManagementClass mClass = new ManagementClass(scp, new ManagementPath("Win32_Process"), new ObjectGetOptions());
ManagementBaseObject inParams = mClass.GetMethodParameters("Create");
inParams["CommandLine"] = exeName;
ManagementBaseObject outParams = mClass.InvokeMethod("Create", inParams, null);


}

scp.connect() kısmında hata veriyor.
Remote bilgisayrın güvenlik duvarı kapalı ve yönetim şablonlarındaki "uzaktan yönetim izni" ayarı da etkin.
Zaten çalışan processlerini görebiliyorum ve kill edebiliyorum.
Ama dosya yolunu vererek bir processi çalıştırmak iste​diğimde " Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) " hatasını alıyorum.

Sorun ne olabilir?? Nasıl düzeltebilirim.
Yardımlarınız için şimdiden çok ama çok teşekkürler.
 
Üst