كيفية تشغيل البرنامج قبل الخروج على نظام التشغيل ويندوز XP ؟
-
11-07-2019 - |
سؤال
أنا أبحث عن عكسية إصدار "RunOnceEx".
RunOnceEx تشغيل بعض البرامج قبل المستخدم قذيفة(سطح المكتب و شريط المهام) تبدأ.تسجيل الدخول التقدم لن تستمر قبل runonceex كاملة.
كنت تريد أن تفعل بالضبط نفس ولكن على المستخدم تسجيل الخروج.عندما قالت انها/انه خروج كل برنامج تشغيل إيقاف التشغيل ، وترك قذيفة(سطح المكتب و شريط المهام) ، ثم ""اتمنى ان البرنامج سيتم تنفيذ هذه اللحظة"", وأخيرا الخروج.
وأعتقد أنه من الممكن لأن "mobsync.exe" هو يفعل ذلك.ولكن لا أستطيع أن أجد فيها وكيفية القيام بذلك.
المحلول
لتشغيل هذا فقط للمستخدم الحالي، يمكنك استخدام WMI للحصول على المعلومات عند حدوث اغلاق / تسجيل الخروج.
وإما أن تكتب صغير C # (أو أي لغة أخرى يمكن استخدام WMI) تطبيق أو برنامج نصي فبس للاستماع على Win32_ComputerShutdownEvent م> الحدث WMI.
ومثال C # التطبيق يمكن العثور عليها هنا في هذا السؤال: الحصول على تسجيل الخروج من الحدث نظام
نصائح أخرى
تحذير, كما قال هنا, gpedit.msc
سوف تسمح لك لتكوين تسجيل الخروج النصي بالنسبة كل المستخدمين.
إذا كنت بحاجة إلى هذا البرنامج النصي فقط لمستخدم واحد, عليك أن يعلن ذلك مباشرة في التسجيل ، سواء في HKCU
و HKLM
.
وجدت في النتيجة الأولى على جوجل بالنسبة لي
لتنفيذ البرنامج يمكنك إنشاء برنامج نصي لتشغيله واستخدام نهج المجموعة لتطبيقه. في محرر نهج المجموعة انتقل إلى تكوين المستخدم -> إعدادات ويندوز -> برامج نصية (تسجيل الدخول / الخروج)
إذا كنت ترغب في تشغيل البرنامج إلى تنفيذ التعليمات البرمجية على تسجيل الخروج، ثم عليك أن ربط رسالة WM_QUERYENDSESSION
وابحث عن قيمة lParam
من (0x80000000) ENDSESSION_LOGOFF
.
من المهم لاختبار هذه القيمة lParam
لأن بعضها الآخر تشير إلى وجود "القسري وثيقة" - أي قد يكون قتل العملية الخاصة بك قبل أن يتم حتى يسمح التعليمات البرمجية لتشغيل. في الواقع، وتهدف معظم الرسائل اغلاق / جلسة نهاية فقط لتعطيك فرصة لتشغيل رمز تنظيف في اللحظة الأخيرة وليس ذلك آمنة للرد على مع الإجراءات التي طال أمدها. ولكن هذا المزيج معين ينبغي أن يكون موافق.
ملحوظة: لقد حاولت أبدا في الواقع لتشغيل عملية منفصلة ردا على رسالة WM_QUERYENDSESSION
. فمن الممكن أن مدير النوافذ وعدم السماح هذه، كما يفعل أثناء إيقاف التشغيل. انها محاولة ونرى، وأعتقد.
إذا كنت في بيئة. NET (لم يتم تحديد)، وهي طريقة أسرع لإضافة معالج الحدث إلى الحدث Microsoft.Win32.SystemEvents.SessionEnding
.
ما عليك هو تنفيذ جينا.يمكنك تشغيل أوامر مخصصة في WlxIsLogoffOk الدالة التي يتم استدعاؤها عندما يبدأ المستخدم تسجيل الخروج
بمجرد إنشاء السليم جينا dll يمكنك التسجيل من هنا: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\@GinaDLL
هنا هو التنفيذ التي قد تناسب الاحتياجات الخاصة بك (وهو يوفر تسجيل الخروج مفتاح التسجيل حيث يمكن تحديد الأوامر الخاص بك):http://wwwthep.physik.uni-mainz.de/~frink/newgina_pre09/readme.html
وكما VonC وTFD التي سبق ذكرها، محرر نهج المجموعة هو مجرد وسيلة أخرى لمعالجة التسجيل.
ومجرد جعل مع gpedit التغييرات (في Userconfig - إعدادات ويندوز - مخطوطات) تريد وبعد ذلك نلقي نظرة في التسجيل في [HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\System\Scripts]
لمعرفة كيف يمكنك أن تفعل ذلك مباشرة.
وأيضا على جهاز الكمبيوتر (شنقا في مجال) هو C:\WINDOWS\System32\GroupPolicy
مجلد مخفي مع المجلدات الفرعية للمستخدم والجهاز. على حد سواء بعد المجلدات الفرعية الإضافية المطلوبة إيقاف وبدء التشغيل. ربما يمكنك أيضا استخدام هذه منها.
إذا كنت بحاجة إلى شيء بسيط و العمل واحد (أو أي) المستخدم يمكنك جعل تطبيق بسيط في C++ أو C# على سبيل المثال.
أبسط هو وجود C# في صينية (ببساطة عن طريق إضافة علبة مكون شكل) و سجل و معالج الحدث عن FormClosing هذا الحدث.انها تبدو مثل هذا:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason != CloseReason.UserClosing)
{
// It's not the user closing the application,
// Let's do whatever you want here, for example starting a process
Process notePad = new Process();
notePad.StartInfo.FileName = "notepad.exe";
notePad.StartInfo.Arguments = "ProcessStart.cs";
notePad.Start();
}
}
حتى التطبيق الخاص بك سوف تبدأ مع ويندوز أو مع المستخدم.سوف انتظر (باستخدام القليل من الذاكرة) و سوف تفعل شيئا عند إيقاف تشغيل النظام أو المستخدم تسجيل الخروج ، إلخ (عن طريق التحقق من "CloseReason" أعلاه).