سؤال

لقد تم تكليفها بكتابة تثبيت مع تطبيق Silverlight خارج المتصفح. أنا بحاجة لــ.

  1. احصل على الإصدار من exe محلي
  2. تحقق من خدمة ويب لترى أنها أحدث إصدار
  3. قم بتنزيل الرمز البريدي إن لم يكن
  4. فك الرمز البريدي
  5. الكتابة فوق exe القديم
  6. ابدأ exe

تطبيق التثبيت هذا مكتوب في .NET WinForms الآن ولكن .NET Framework هو عقبة أمام الأشخاص للتنزيل.

الحل الموصى به هو استخدام SLOOB ولكن لست متأكدًا من كيفية تعيين الثقة الكاملة. إذا قمت بتعيين ثقة كاملة ، فهل يمكنني بدء عملية.

شكرًا

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

المحلول

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

ومع ذلك ، إذا كنت ستفعل هذا:

للحصول على كائن COM ، ستحتاج إلى استخدام AutomationFactory.CreateObject(...) API. يوفر تيم هوير عينة هنا.

للقيام بالفعل بالبرمجة البرمجة النصية لـ WMI ، سترغب في إنشاء ملف WbemScripting.SWbemLocator اعتراض الجذر. من هناك ، استخدم ConnectServer طريقة للحصول على خدمة WMI على الجهاز المسماة. يمكنك بعد ذلك استجوابه Win32_Process وحدة لإنشاء عمليات جديدة.

تحرير: قضيت القليل من الوقت في العمل على هذا ، وحتى على الجهاز المحلي الخاص بي كمسؤول ، أواجه مشاكل في الأمان. الرمز الصحيح سيكون شيئًا مشابهًا لـ:

        dynamic locatorService = AutomationFactory.CreateObject("WbemScripting.SWbemLocator");
        dynamic wmiService = locatorService.ConnectServer("winmgmts:{impersonationLevel=impersonate,authentationLevel=Pkt}//./root/cimv2");

        dynamic process = wmiService.Get("Win32_Process");

        dynamic createParameters = process.Methods_["Create"].InParameters.SpawnInstance_;

        createParameters.CommandLine = "cmd.exe";

        wmiService.ExecMethod("Win32_Process", "Create", createParameters);

نصائح أخرى

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