سؤال

أحتاج إلى إنشاء خدمة عن بُعد وأفضل عدم الانفصال عن أمر وتشغيل "Sc Remotemachine إنشاء ......" وأريد القيام بذلك ضمن رمز C#.

ومع ذلك ، عند تشغيل الرمز على الرغم من أن الأمر SC يعمل بسعادة تامة ، وبالتالي يدير النظام عن بُعد ، فإن ConcernementScope.Connect Call ترمي استثناءً بـ "خادم RPC غير متوفر".

مقتطف من الكود الذي يفعل ذلك

string machineName = "othermachine";
string path = string.Format(@"\\{0}\root\cimv2", machineName);
ManagementScope scope = new ManagementScope(path);
scope.Connect();

نظرًا لأن هذا يتعلق بالخطوة الأولى في الرحلة ، فأنا عالق قليلاً فيما يتعلق بمكان الذهاب بعد ذلك. يعمل أمر SC ، فما الذي يفعله مختلفًا (بخلاف عدم استخدام مكتبات .NET - ربما أحتاج إلى ضرب Winapi بقوة أكبر؟)

شكرًا

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

المحلول

بعد التفكير في ذلك لفترة قصيرة ، بعد رؤية الوقت الذي تم تعيينه لهذه المهمة التي تعرضت للخطأ ، حصلت على وثائق API القديمة و [Dllimport] "المكالمات التي كنت بحاجة إليها للقيام بذلك" الطريقة القديمة ". نظرًا لكوني كلبًا قديمًا ، اعتدت أن أعرف طريقي حول هذه المكالمات ، مدهشًا إلى أي مدى يعود حتى بعد بضع سنوات من استخدام المكتبات المدارة.

ما كنت بحاجة إلى فعله هو أن أكون قادرًا على إنشاء ServCie ، وبدء تشغيله ، والقيام بعمل مفيد ، وإيقافه ، وحذفه. إن إنشاء ، وبدء ، توقف وحذف ميكانيكا وأردت التركيز على جزء "القيام بعمل مفيد" من النشاط.

قمت أولاً بنسخ Exe للخدمة إلى مشاركة $ $ والتحقق من المسار المحلي لذلك (مع مدراء الخادم لدينا لا يوجد شيء!). للقيام بذلك أتصل

["netapi32.dll"]NetShareGetInfo 

ثم استخدمت ما يلي مع من Advapi32.dll

  • OpenScmanager
  • يخلق الخدمات
  • إبدأ الخدمة
  • OpenService (لأنه عندما أرغب في التوقف وحذفه - لا تبقي المقابض مفتوحة لأن هذا قد يستغرق بعض الوقت أكثر نظافة للحفاظ على احتواء ذاتيا)
  • Controlservice
  • QueryServicestatus
  • CloseServiceHandle

كل هذا يعمل حتى عبر اتصال VPN.

لا يمكنني إلا أن أخمن أن واجهة برمجة التطبيقات المدارة تحاول أن تفعل أكثر بكثير مما أحتاجه فعليًا - الفرق في الوقت المستغرق باستخدام واجهة برمجة التطبيقات المدارة وأن Windows API كثيرًا ، وبدون ضمانات أن واجهة برمجة التطبيقات المدارة ستتمرر بها 't طريقة مناسبة للمضي قدما.

نصائح أخرى

من الواضح أن رمز المخزون من MSDN لا يرسم الصورة كاملة. أحصل على نفس النتائج مثلك.

تحقق من ما هذا الرجل فعل.

تعديل:

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

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