سؤال

لدي العديد من آلات الرقيق والآلة الرئيسية التي تعمل معا تطبيق موزعة معا. يجب أن يكون للعمليات على كل آلة عبودية وصول واجهة المستخدم الرسومية والشبكة (أعتقد أنه سيتم استدعاؤه عملية تفاعلية بعد ذلك). لسهولة الاستخدام، سيكون من الرائع أن يكون الجهاز الرئيسي قد يبدأ / إيقاف العمليات الموجودة في تلك الآلات الرقيق.

كانت فكرتي الأولى هي استخدام WMI فئة WMI و Win32_Process لبدء عملية عن بعد ولكن عند إجراء مزيد من التحقيق تم اعتبارها أن العمليات بدأت بهذه الطريقة غير تفاعلية ومعزولة، وبالتالي لا يمكن أن يكون لديك أي واجهة المستخدم الرسومية. تقول ملاحظة أنه يمكن للمرء استخدام Win32_scheduledjob.create لإنشاء عملية تفاعلية عن بعد، لكنها تعمل تحت حساب Localsystem الذي أود تجنبه (كما أنني لم أستطع حتى الحصول عليها بشكل صحيح).

ماذا ستكون طرقا جيدة لحل هذه المشكلة؟ ربما من الممكن تشغيل تطبيق مساعد بدوره عملية مناسبة، ولكن هذا يبدو قذرا جدا.

تحرير: PSExec كان حقا clunky عندما حاولت ذلك وبطء كما الجحيم (غير متأكد من السبب). تبحث أبعد من ذلك في PSExec، يبدو أنه يقوم بتثبيت خدمة مؤقتة على الجهاز البعيد لإطلاق التطبيق. هل ستكون هذه هي الطريقة الوحيدة لتفرخ عملية تفاعلية باستخدام هوية مناسبة؟ يجب أن أدرج خدمة المساعد في الإعداد للعقد؟ ولكن حتى ذلك الحين، كيف يمكنني التواصل معها بعد ذلك؟

هل كانت مفيدة؟

المحلول

PSEXEC جزء من جناح Sysinternals الذي يمكن أن يفعل ذلك

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

إذا كانت الخوادم الخاصة بك تعمل بنظام Windows 2008، فيمكنك أيضا استخدامها

الخدمات الطرفية التطبيق عن بعد

نصائح أخرى

يمكنك استخدام الأمر "في".

افتح سطر الأوامر واكتب

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

أعتقد أن معظم الطرق الأخرى للقيام بذلك (دون تثبيت الخدمة الخاصة بك) قد تم إيقاف تشغيلها بواسطة حزم خدمة مختلفة بسبب نقاط الضعف.

يستخدم النشران التاليان .NET لتنفيذ عمليات عن بعد.

  1. باستخدام WMI

    http://weblogs.asp.net/steveschofield/archive/2006/06/06/WMI---START-A-PROCESS-ON-REMOTE-MACHINE-PASSING-CREDELSS_2E00_.ASPX.

  2. مثال CodeProject

http://www.codeproject.com/kb/ip/remotingexec.aspx.

يتم تنفيذ الأمثلة مع بيانات الاعتماد المخصصة والتنفيذ عن بعد هو تطبيق Win Conform. أتمنى أن يساعدك هذا.

إذا كانت مجموعة ENIRE بشكل معقول تحت سيطرتك، فقد يكون من الممكن تنفيذ هذه العمليات النائية كخدمات Windows. يمكن أن تكون الخدمة تفاعلية (ليس افتراضيا على الرغم من) ويمكن التحكم فيها عن بعد عبر إدارة التحكم في الخدمة القياسية التي تعمل على كل جهاز كمبيوتر يعمل بنظام Windows.

هل لي أن أسأل لماذا تحتاج عمليات الرقيق إلى وجود واجهة المستخدم الرسومية؟ لدي إعداد مماثل، لكنه بحاجة إلى واجهة المستخدم الرسومية فقط خلال الإعداد الأولي.

على أي حال، إليك ما قمت به، ولكن لسوء الحظ يعتمد ذلك على العملية التي تعمل كحساب Localsystem، الذي أفهم أنك تحاول تجنبه، إذا كنت بحاجة حقا إلى واجهة المستخدم الرسومية.

لتعطيك القليل من الخلفية، كان التطبيق الذي اضطررت لتوزيعه هدسون, ، وكان هذا إصدارا سابقا حيث الطريقة التي توزع بها هي من خلال تشغيل تطبيق Java Webstart، وبالتالي الحاجة إلى GUI (على الأقل أثناء الإعداد، لمساعدة استكشاف الأخطاء وإصلاحها).

ما قمت بإعداد تطبيقات الرقيق كخدمات على آلات الرقيق باستخدام SC.EXE (وهو بيتا للحصول على صواب، لحسن الحظ أنك تفعل ذلك مرة واحدة فقط). شيء على غرار:

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

لاحظ المساحات بعد المعلمات (binpath = etc)، تلك ضرورية. لاحظ أيضا أنني وجدت أنه من الأسهل إسقاط "النوع = التفاعل" وتغييره يدويا في وحدة تحكم الخدمة.

ثم على الماجستير، أيضا باستخدام SC.EXE، أبدأ الخدمة عن بعد:

sc.exe \\slavemachine start SlaveService

والتحقق من أن البرنامج كان يعمل على آلات الرقيق.

الآن في حالتي، لم أحتاج حقا إلى واجهة المستخدم الرسومية، بخلاف استكشاف الأخطاء وإصلاحها الأولي. بمجرد أن أحصل على كل شيء يعمل بشكل صحيح، قمت ببساطة بتكوين الخدمة لتشغيل كحساب خدمة، ولكن لم يعد في وضع تفاعلي.

أتمنى أن تجد هذا مفيدا.

هناك بضعة مكونات تحتاج إلى جعل هذا يحدث.

أولا، ستحتاج إلى طريقة للتواصل مع الجهاز البعيد.

ثانيا، ستحتاج إلى شيء ما على الاستماع إلى الجهاز البعيد الذي يمكن أن يبدأ طلبك.

تستخدم الاقتراحات الأخرى قبل كل شيء شيء مدمج لأحد هذه المكونات أو كلاهما، وهو ما يرام، طالما أن قيود أي من الحلول المعينة مناسبة.

يشبه PSEXEC الحل الأكثر واعدة، خارج الصندوق. خلاف ذلك، يمكنك لفة تطبيقك الخاص للاستماع إلى رسائل بسيطة عبر أنابيب TCP / المسماة / مهما كانت فقط تفرخ العمليات الفرعية المناسبة. التحذير الوحيد الذي ستحتاج إليه حريصا على الأمن، خاصة إذا تعرض أي من الآلات علنا.

تم تطوير Suite Pstools بواسطة Sysinternals وكانت كبيرة جدا تم شراؤها من قبل Microsoft بعض الوقت لاحقا. باستخدام هذه الأدوات هو أفضل طريقة لإنجاز مهمتك.

أراك ذكرت مشكلة في تشغيل التطبيقات بشكل تفاعلي. هل يمكنني الاقتراح باستخدام / التبديل لتشغيل التطبيق بشكل تفاعلي. تقدم PSTools كل الوظائف التي تبحث عنها. تحتاج فقط إلى اللعب مع مفاتيح للحصول على النتيجة المرجوة.

لم أشهد أبدا البطء الذي تصفه في تطبيقاتي التي تستخدم PSTools.

MPICH2. غالبا ما تستخدم في مجموعات الحوسبة عالية الأداء ويجب أن تكون قادرة على القيام بما تريد. حتى إذا كنت لا تستخدمها لمرور الرسائل بين الآلات، فيمكنك استخدام قاذفة العمليات الخاصة بها لبدء تشغيل جميع العمليات من الجهاز الرئيسي. يمكن إعداده للمصادقة كمستخدم Windows معين على الأجهزة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top