كيف يمكنني بدء تشغيل Explorer.exe عبر C++؟
-
21-08-2019 - |
سؤال
أحاول بدء تشغيل Explorer.exe برمجيًا ولكن لم يحالفني الحظ.
هذا هو الكود الخاص بي:
cout << pName << "died, lets restart it." << endl;
STARTUPINFO startupInfo = {0};
startupInfo.cb = sizeof(startupInfo);
PROCESS_INFORMATION processInformation;
if(CreateProcess(pName, NULL, NULL, NULL, false, NORMAL_PRIORITY_CLASS, NULL, NULL, &startupInfo, &processInformation) == 0){
cout << "Error starting " << pName << ": " << GetLastError() << endl;
}
وpName هو explorer.exe
هل يمكن لأحد أن يقول لي ما الذي أفعله الخطأ؟أحصل على رمز الخطأ "2" وهو ERROR_FILE_NOT_FOUND
المحلول
المعلمة الأولى هي اسم التطبيق؛والثاني هو سطر الأوامر.حاول تحديد "explorer.exe" كمعلمة ثانية.
انظر الى هذا مقالة MSDN:
lpApplicationName [في، اختياري]
اسم الوحدة المراد تنفيذها.يمكن أن تكون هذه الوحدة المستندة إلى Windows تطبيق.يمكن أن يكون نوع آخر من الوحدة النمطية (على سبيل المثال، MS-DOS أو OS/2) إذا كان النظام الفرعي المناسب هو متوفر على الكمبيوتر المحلي.
يمكن للسلسلة تحديد المسار الكامل واسم ملف الوحدة المراد تنفيذها أو يمكنه تحديد اسم جزئي.في حالة الاسم الجزئي ، تستخدم الوظيفة محرك الأقراص الحالي و الدليل الحالي لإكمال مواصفات. لن تكون الوظيفة استخدام مسار البحث.هذه المعلمة يجب أن يتضمن ملحق اسم الملف ؛لا يُفترض وجود امتداد افتراضي.
نصائح أخرى
وأنت ربما ينبغي إعطاء " ShellExecuteEx "المحاولة. تتيح لك هذه الوظيفة تحديد ملف م> أو <م> مجلد م> و<م> الفعل م> أن يصف ما يجب القيام به. إذا كنت تستخدم "explore
"، كما <م> الفعل م>، فإنه سيتم فتح مستكشف ويندوز مع إعطاء <م> مجلد م>.
من الصعب بشكل مدهش العثور على المعلومات ذات الصلة حول كيفية القيام بذلك بثقة أعد تشغيل مستكشف Windows.في نظام التشغيل Windows 7/8 64 بت، لا تعمل طريقة ShellExecute بشكل صحيح وتؤدي إلى تعطل أشياء مثل نسخ الملفات وتراكبات الأيقونات تمامًا.
يبدو أن الطريقة الأكثر موثوقية هي استخدام استدعاء النظام stdlib.h:
system("start explorer");
إذا كنت تحاول إيقاف تشغيل المستكشف وإعادة تشغيله، فقد ترغب في تعطيل مفتاح التسجيل AutoRestartShell برمجيًا، مما يمنعك من التحكم متى يتم إعادة تشغيل المستكشف.