7

में रिमोट प्रोसेसिंग शुरू करना मेरे पास कई दास मशीनें और एक मास्टर मशीन है जो एक साथ एक वितरित एप्लिकेशन चलाती है। प्रत्येक दास मशीन पर प्रक्रियाओं में एक जीयूआई और नेटवर्क एक्सेस होना चाहिए (मुझे लगता है कि इसे तब एक इंटरैक्टिव प्रक्रिया कहा जाएगा)। उपयोग की आसानी के लिए यह अच्छा होगा अगर मास्टर मशीन उन दास मशीनों पर प्रक्रियाओं को शुरू/बंद कर सकती है।विंडोज नेटवर्क

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

इस समस्या को हल करने के लिए अच्छे तरीके क्या होंगे? शायद एक सहायक एप्लिकेशन लॉन्च करना संभव है जो बदले में उचित प्रक्रिया शुरू करता है, लेकिन यह काफी गंदा लगता है।

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

उत्तर

6

PsExec sysinternals सुइट का भाग है कि

http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

अपने सर्वर विंडोज़ 2008 चला रहे हैं आप भी उपयोग कर सकते हैं

Terminal Services Remote App

+0

जब मैंने PsExec को आजमाया तो यह काफी धीमा था (यकीन नहीं क्यों) और काफी सही ढंग से काम नहीं किया। सही खाते के तहत जीयूआई ऐप्स लॉन्च किए जाएंगे, टास्कबार में देखा जा सकता है, लेकिन वास्तविक जीयूआई कभी अपडेट नहीं हुआ और केवल एक मृत "ब्लॉक" दिखाई दे रहा था। – gix

1

आप "पर उपयोग कर सकते हैं कर सकते हैं "कमांड।

खुला एक कमांड लाइन और प्रकार

at /? 

टर्मिनल में। एक नकारात्मक बात यह है कि रिमोट सिस्टम पर समय आपके कुछ उचित डेल्टा के भीतर होना चाहिए। यह भी तत्काल नहीं है। यह सुनिश्चित करने के लिए कि रिमोट शेड्यूलर पूरी तरह से ईवेंट को याद नहीं करता है, आपको कुछ सेकंड इंतजार करना होगा।

एक WMI बराबर यह करने के लिए नहीं है, और कम से के रूप में एक ही मूल चेतावनियां है:

प्रविष्टि 3: कोड Windows Server 2003 पर एक इंटरएक्टिव प्रक्रिया बनाने के लिए, Windows XP और Win2K SP3 मशीनें

Const INTERVAL = "n" 
Const MINUTES = 1 

strComputer = "compaq575" 
strCommand = "calc.exe" 

Set objWMIService = _ 
    GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
Set objScheduledJob = objWMIService.Get("Win32_ScheduledJob") 

Set objSWbemDateTime = _ 
    CreateObject("WbemScripting.SWbemDateTime") 
objSWbemDateTime.SetVarDate(DateAdd(INTERVAL, _ 
    MINUTES, Now())) 

intReturnValue = objScheduledJob.Create(strCommand, _ 
    objSWbemDateTime.Value, False, 0, 0, True, intJobID) 
WScript.Echo "Job ID: " & intJobID 

मुझे लगता है कि इसे करने के अन्य तरीकों (अपनी खुद की सेवा स्थापित किए बिना) भेद्यता के कारण विभिन्न सर्विस पैक द्वारा बंद कर दिया गया है।

1

निम्न दो पोस्ट दूरस्थ प्रक्रियाओं को निष्पादित करने के लिए .NET का उपयोग करते हैं।

  1. WMI

    का उपयोग

    http://weblogs.asp.net/steveschofield/archive/2006/06/06/WMI---start-a-process-on-remote-machine-passing-credentials_2E00_.aspx

  2. codeproject उदाहरण

http://www.codeproject.com/KB/IP/RemotingExec.aspx

उदाहरण कस्टम साख & दूरदराज के निष्पादन के साथ निष्पादित एक जीत फो है आरएम ऐप। उम्मीद है कि यह मदद करता है।

1

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

+0

क्या आप वाकई एक इंटरैक्टिव हो सकते हैं? मेरे पास एक सेवा है जिसे मैं हैंगफायर के माध्यम से संचार करता हूं, एक वीएम पर विंडोज सर्वर 2012 चल रहा है, और मुझे इंटरैक्टिव चलाने के लिए सेवा नहीं मिल सकती है ... – EluciusFTW

+0

@EluciusFTW: आपको इंटरैक्टिव चलाने के लिए यादृच्छिक सेवाएं नहीं मिल सकती हैं, लेकिन यहां स्टैक ओवरव्लो I पर। मुझे लगता है कि मैं एक सेवा के डेवलपर को संबोधित कर रहा हूं। – MSalters

+0

मैं अंतःक्रियात्मक रूप से चलाने के लिए अपनी स्वयं लिखित सेवा (सी # में सी # में लिखा गया) प्राप्त करना चाहता हूं। कोई विचार? यहां देखें: http://stackoverflow.com/questions/39721393/service-does-not-execute-command-on-windows-server-2012 – EluciusFTW

0

पीएसटीयूल्स सूट Sysinternals द्वारा विकसित किया गया था और यह बहुत अच्छा था कि कंपनी कुछ समय बाद माइक्रोसॉफ्ट द्वारा खरीदी गई थी। इन उपकरणों का उपयोग करना आपके कार्य को पूरा करने का सबसे अच्छा तरीका है।

मुझे लगता है कि आपने अनुप्रयोगों को अंतःक्रियात्मक रूप से चलाने में समस्या का उल्लेख किया है। क्या मैं एप्लिकेशन को इंटरैक्टिव रूप से चलाने के लिए/i स्विच का उपयोग करने का सुझाव दे सकता हूं। PSTools आप जिस कार्यक्षमता की तलाश में हैं, वह सभी प्रदान करता है। आपको वांछित परिणाम प्राप्त करने के लिए बस स्विच के साथ खेलने की जरूरत है।

मैंने कभी भी उन अनुप्रयोगों में वर्णित धीमी गति का अनुभव नहीं किया है जो PSTools का उपयोग करते हैं।

1

क्या मैं पूछ सकता हूं कि गुलाम प्रक्रियाओं को जीयूआई क्यों होना चाहिए? मेरे पास एक समान सेट अप है, लेकिन प्रारंभिक सेट अप के दौरान केवल एक जीयूआई की आवश्यकता है।

वैसे भी, मैंने जो किया है, वैसे भी, यह स्थानीय सिस्टम खाते के रूप में चल रही प्रक्रिया पर निर्भर करता है, जिसे मैं समझता हूं कि आप वास्तव में जीयूआई की आवश्यकता है, अगर आप समझने की कोशिश कर रहे हैं।

आपको थोड़ी सी पृष्ठभूमि देने के लिए, मुझे जिस एप्लिकेशन को वितरित करना था, वह Hudson था, और यह एक पुराना संस्करण था जहां आप इसे वितरित करने के तरीके को जावा वेबस्टार्ट एप्लिकेशन चलाकर, और इस प्रकार एक जीयूआई (कम से कम सेट अप के दौरान, समस्या निवारण में सहायता के लिए)।

मैंने जो किया वह दास अनुप्रयोगों को sc.exe का उपयोग करके दास मशीनों पर सेवाओं के रूप में स्थापित किया गया था (जो सही पाने के लिए एक पिटा है, सौभाग्य से आप केवल एक बार ऐसा करते हैं)। कुछ के साथ कुछ:

sc.exe create SlaveService binPath= c:\path\to\slave.exe type= interact DisplayName= "The Slave Service" 

पैरामीटर (binPath = आदि) के बाद रिक्त स्थान पर ध्यान दें, वे आवश्यक हैं। ध्यान दें कि मुझे "टाइप = इंटरैक्ट" ड्रॉप करना और सर्विस कंसोल में इसे मैन्युअल रूप से बदलना आसान लगता है।

तब गुरु पर, यह भी Sc.exe का उपयोग कर, मैं दूर से सेवा शुरू:

sc.exe \\slavemachine start SlaveService 

और सत्यापित है कि कार्यक्रम गुलाम मशीनों पर चल रहा था।

अब मेरे मामले में, मुझे प्रारंभिक समस्या निवारण के अलावा, वास्तव में जीयूआई की आवश्यकता नहीं थी। जैसे ही मुझे सबकुछ ठीक से चल रहा था, मैंने बस सेवा खाते के रूप में चलाने के लिए सेवा को कॉन्फ़िगर किया, लेकिन अब इंटरैक्टिव मोड में नहीं।

मुझे आशा है कि आपको यह सहायक लगेगा।

+0

बहुत देर से उत्तर * बतख *। प्रक्रियाओं को एक जीयूआई की आवश्यकता होती है क्योंकि यह कई मशीनों और डिस्प्ले (पावरवॉल) में एक विज़ुअलाइजेशन था। – gix

1

ऐसा करने के लिए आपको कुछ घटकों की आवश्यकता होगी।

सबसे पहले, आपको दूरस्थ मशीन के साथ संवाद करने की एक विधि की आवश्यकता होगी।

दूसरा, आपको रिमोट मशीन पर कुछ चाहिए जो सुन रहा है जो आपका आवेदन शुरू कर सकता है।

ऊपर दिए गए अन्य सुझाव इन दोनों घटकों में से एक या दोनों के लिए अंतर्निहित कुछ उपयोग करते हैं, जो ठीक है, जब तक कि किसी दिए गए समाधान के प्रतिबंध उचित हैं।

PsExec सबसे आशाजनक, आउट-ऑफ-द-बॉक्स समाधान की तरह दिखता है। अन्यथा, आप टीसीपी/नामित पाइप/जो कुछ भी उचित उप-प्रक्रियाओं के माध्यम से सरल संदेशों को सुनने के लिए अपना स्वयं का ऐप रोल कर सकते हैं। इसके साथ एकमात्र चेतावनी है कि आप सुरक्षा के चारों ओर बहुत सावधान रहना चाहेंगे, खासकर अगर मशीनों में से किसी भी सार्वजनिक रूप से उजागर हो।

0

MPICH2 अक्सर उच्च प्रदर्शन कंप्यूटिंग क्लस्टर में उपयोग किया जाता है और जो भी आप चाहते हैं उसे करने में सक्षम होना चाहिए। यहां तक ​​कि यदि आप मशीनों के बीच संदेशों को पारित करने के लिए इसका उपयोग नहीं करते हैं, तो भी आप मास्टर मशीन से सभी प्रक्रियाओं को शुरू करने के लिए अपनी प्रक्रिया लॉन्चर का उपयोग कर सकते हैं। इसे मशीनों पर एक विशेष विंडोज उपयोगकर्ता के रूप में प्रमाणीकृत करने के लिए स्थापित किया जा सकता है।

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