سؤال

أحاول بدء تشغيل 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 برمجيًا، مما يمنعك من التحكم متى يتم إعادة تشغيل المستكشف.

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