2010-09-15 14 views
5

निष्पादित करना मैं .NET का उपयोग कर रहा हूं, और किसी भी सहायक एपीआई को खोजने की कोशिश कर पागल हो रहा हूं जो मुझे एक लैन नेटवर्क में फ़ाइल स्थानांतरित करने देता है (कोर्स के कठिन व्यवस्थापक प्रमाण-पत्र) और फिर उस मशीन पर इसे निष्पादित करें।.NET - किसी अन्य कंप्यूटर पर लैन में निष्पादन योग्य की प्रतिलिपि बनाना, और इसे

मैंने डब्लूएमआई का उपयोग करके कुछ चीज पढ़ी है, लेकिन ".net WMI कॉपी फाइल" या ".NET WMI निष्पादित फ़ाइलों" के लिए googling मुझे बिल्कुल मदद नहीं कर रहा है।

किसी भी संदर्भ की सराहना की जाएगी।

संपादित

मैं ऐसे PsExec के रूप में एक तीसरी पार्टी उपकरण का उपयोग नहीं कर सकते हैं (हालांकि यह पूरी तरह से करता है कि मैं क्या जरूरत है)। यह PsExec से जुड़े लाइसेंस के कारण है, मैं इसे अपने आवेदन के साथ वितरित नहीं कर सकता।

+0

आपके पास किस प्रकार की पहुंच है? क्या आप लक्ष्य मशीन और स्थानीय मशीन पर कुछ स्थापित कर सकते हैं? – Rudu

+0

@ रुडी: हाँ मेरे पास लैन पर सभी मशीनों पर व्यवस्थापक अधिकार हैं। –

उत्तर

1

मुझे नहीं लगता कि यह आसानी से हासिल किया जा सकता है। हालांकि आप exe के साथ exe की प्रतिलिपि बना सकते हैं। और फिर (.net से, Process.Start के साथ) psExec का आह्वान करें और इसे दूरस्थ रूप से प्रोग्राम निष्पादित करें।

+0

दुर्भाग्यवश मैं PsExec जैसे तृतीय पक्ष टूल का उपयोग नहीं कर सकता। मुझे इसे .NET api .. या अन्य मूल माध्यमों के माध्यम से सीधे करने की ज़रूरत है। –

+0

माइक्रोसॉफ्ट पर आधिकारिक लिंक यह प्रक्रिया वर्ग के बारे में भी कहता है: 'स्थानीय और दूरस्थ प्रक्रियाओं तक पहुंच प्रदान करता है और आपको स्थानीय सिस्टम प्रक्रियाओं को शुरू और बंद करने में सक्षम बनाता है।' इसलिए प्रक्रिया। स्टार्ट केवल ** स्थानीय ** प्रक्रियाओं को शुरू करने के लिए काम करता है। –

+0

@ लुका मैटिस, आप सही हैं, लेकिन मैं प्रक्रिया का उपयोग करने के बारे में बात कर रहा था। PsExec को आमंत्रित करने के लिए प्रारंभ करें। –

0

उन मशीनों पर जिनके पास PowerShell 2.0 remoting सक्षम नहीं है, मुझे PsExec कमांडलाइन टूल बहुत उपयोगी लगता है। इसे दूरस्थ मशीन पर प्रशासन अनुमतियों की आवश्यकता है।

0

एप्लिकेशन कोड शुरू करने के लिए आप Scheduler सेवा (एटी कमांड) का उपयोग करने के लिए विचार कर सकते हैं (http://msdn.microsoft.com/en-us/library/aa384006.aspx देखें) एप्लिकेशन कोड दूरस्थ कंप्यूटर पर कॉपी किए जाने के बाद।

3

मुझे पता है कि यह वर्षों से है, लेकिन इस चुनौती में भाग गया और इस पोस्ट (दूसरों के बीच) में आया ताकि समाधान को साझा करने जा सके यदि इससे आगे बढ़ने में मदद मिलती है। इसका उपयोग डब्लूएमआई पर किसी भी फाइल को स्थानांतरित करने के लिए किया जा सकता है।

समाधान:

1: कुछ WMI पर एक फाइल करने के लिए इको Base64 और certutil साथ डिकोड

ConnectionOptions co = new ConnectionOptions(); 

// isLocal is a variable indicating whether machine name/IP is local  
if (!isLocal) { 
    co.Username = "domainOrMachine\accountName"; 
    co.Password = "password for account"; 
    co.EnablePrivileges = true; 
    co.Impersonation = ImpersonationLevel.Impersonate; 
} 

//ip is a vaiable holding the target endpoint 
ManagementScope s = new ManagementScope(@"\\" + ip + @"\root\cimv2", co); 
s.open(); 

ObjectGetOptions ogo = new ObjectGetOptions(); 
ManagementClass prog = new ManagementClass(s, new 
ManagementPath("Win32_Process"), ogo); 
ManagementBaseObject mbo = prog.GetMethodParameters("Create"); 

mbo["CommandLine"] = @"cmd /c ""echo " + base64String + @" > c:\windows\temp\b64_exec.txt && certutil -decode c:\windows\temp\b64_exec.txt c:\windows\temp\b64_exec.exe && c:\windows\temp\b64_exec.exe"""; 

prog.InvokeMethod("Create", mbo, null); 

अब, देखते हैं: Base64

byte[] bytes = File.ReadAllBytes(pathToExe); 
String file = Convert.ToBase64String(bytes); 

2 करने के लिए EXE कन्वर्ट गेटचा को हाइलाइट करने की आवश्यकता है

  • पूरे आदेश पास की लंबाई 8191 वर्णों से अधिक नहीं हो सकती है, कमांड की अधिकतम लंबाई
  • आप बेस 64 फ़ाइल को तोड़ सकते हैं और इसे कई हिस्सों में भेज सकते हैं - बस याद रखें कि> एक नई फ़ाइल में पाइप या किसी मौजूदा फ़ाइल को ओवरराइट करता है और >> किसी मौजूदा फ़ाइल को जोड़ता या जोड़ता है।
  • आप बेस 64 फ़ाइल को साफ करने के लिए एक डेल कमांड जारी करना भी चाहेंगे - उपलब्ध कमरे के आधार पर, आपको इसे आमंत्रित करने के लिए दूसरा डब्लूएमआई कॉल करना पड़ सकता है।

मेरे मामले में, मैं एक समय में एक पूर्ण 2 एमबी फ़ाइल 7000 वर्ण नहीं भेजना चाहता था, इसलिए मैंने 6KB से कम संकलित एक सरल .net डाउनलोडर बनाया और इसे सभी को एक ही कथन में मिला (उपर्युक्त के अनुसार।) यह मेरे निष्पादन योग्य डाउनलोड करता है और जब पूरा होता है (जब मैं चाहता हूं कि फ़ाइल मुझे डब्लूएमआई पर पूछे, तो मैं इसे डब्लूएमआई पर हटा दूंगा।

संबंधित मुद्दे