سؤال

في مشروع إعداد الملفات القابلة للتنفيذ مثل ".exe، .dll، .js، .vbs" مقبولة ولكن لا توجد وسيلة لتشغيل .bat ملف في إجراء مخصص.

السؤال هو كيفية تشغيل *.bat الملفات أثناء التثبيت؟

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

المحلول

حسنا، بعد الكثير من البحث والمحاكمة والخطأ لقد حلت هذا. لست متأكدا مما إذا كانت هذه هي أفضل طريقة، لكنها تعمل.

إليك السيناريو: لدي تطبيق أود نشره عبر مشروع إعداد Visual Studio. بالإضافة إلى ملفات التطبيق الخاصة بي، أود إنشاء دليل فرعي في الدليل الهدف الذي يحتوي على ملف دفعة (.bat). أرغب في تشغيل هذا الملف في نهاية عملية التثبيت.

إليك ما تفعله:

  1. قم بإنشاء مشروع إعداد وتكوينه كما تفعل عادة، بما في ذلك الدليل الفرعي الذي ستضع فيه ملف الدفعات الخاص بك (يمكنك فقط تقديمه في مجلد التطبيق مباشرة إذا كنت لا تريد ذلك في دليل فرعي).
  2. في عرض "نظام الملفات" (انقر بزر الماوس الأيمن فوق المشروع في Solution Explorer-> عرض-> نظام الملفات)، أضف الملف الدفعي الذي تريد تنفيذه و cmd.exe (c: windows system32 cmd.exe)
  3. افتح عرض "الإجراءات المخصصة" (انقر بزر الماوس الأيمن فوق المشروع في Solution Explorer-> عرض-> إجراءات مخصصة)
  4. انقر بزر الماوس الأيمن فوق "الالتزام" واختر "إضافة إجراء مخصص"
  5. انتقل إلى وحدد cmd.exe.
  6. افتح لوحة الخصائص للعمل المخصص الذي تم إنشاؤه حديثا.
  7. حذف / الالتزام من خاصية الوسائط.
  8. يدخل: /c "[TARGETDIR]subdirectoryname\batchfile.bat" في خاصية الوسائط، حيث يجب استبدال اسم الدليل الفرعي باسم الدليل الفرعي (إذا وضعت ملف الدفعات في دليل فرعي كما فعلت ... إذا لم تكن، يجب أن تكون القيمة /c "[TARGETDIR]batchfile.bat") وينبغي أن يكون batchfile.bat اسم ملف ملف الدفع الخاص بك.

هذا هو. سيتم الآن تنفيذ ملف الدفعات بمجرد اكتمال بقية عملية التثبيت.

إليك مثال من أجل الوضوح:

ملف دفعي الخاص بي: blah.bat
إداري الفرعي: ميدير

ستكون قيمة الحجج الخاصة بي مخصص استهداف CMD.EXE

/c "[TARGETDIR]mydir\blah.bat"

نأمل أن يساعد شخص ما!

نصائح أخرى

  1. تحقق من هذه المقالة (يتم إهمال المقالة)، على الرغم من أنه في vb.net، فإنه ينطبق على C # كذلك. الجزء الأكثر أهمية هو (ترجمة إلى C #) إنشاء مكتبة فئة جديدة، وإضافة فئة مثبت جديدة مع المحتوى التالي: كما هو مذكور في المقالة، يمكنك بعد ذلك إنشاء إجراء مخصص جديد مع مرجع إلى مشروعك الذي تم إنشاؤه فقط.

    override void Commit(IDictionary savedState)
    {
         base.Commit(savedState);
         System.Diagnostics.Process.Start("myApp.bat","your bat arguments");
    }
    
  2. نحن الآن نضيف ملف دفعي إلى مشروع Installer الخاص بك. قم بإنشاء مشروع إعداد وتكوينه كما تفعل عادة، بما في ذلك الدليل الفرعي الذي ستضع فيه ملف الدفعات الخاص بك (يمكنك فقط تقديمه في مجلد التطبيق مباشرة إذا كنت لا تريد ذلك في دليل فرعي).

  3. في عرض "نظام الملفات" (انقر بزر الماوس الأيمن فوق المشروع في Solution Explorer-> عرض-> نظام الملفات)، أضف الملف الدفعي الذي تريد تنفيذه.

  4. بناء مشروع المثبت.

إحدى الطرق الأخرى للوصول إلى نفس النتيجة وضع ملف .vbs في الإجراءات المخصصة التي تقوم بتشغيل ملف المراسل .bat. الرمز التالي هو "RunRegisterComponents.vbs" وضعت في مجلد تطبيق الإعداد. بالطبع وضعت [TargetDir] كمعلمة .vbs في نافذة خاصية Visual Studio.

dim WshShell
Set WshShell = CreateObject("WScript.Shell")

' Read the "CustomActionData" property holding the install directory.
dim programDir
programDir=  property("CustomActionData")

' Make the batch full file name and parameter
commandString = chr(34) & programDir & "RegisterComponents.bat" & chr(34) & " " & chr(34) &
programDir& chr(34)

' Set the current directory
WshShell.CurrentDirectory = programDir

' Run batch.
ret = WshShell.Run (commandString, 0, 0)

هذا هو أنني وضعت الإجراءات المخصصة الخاصة بي:

enter image description here

آمل أن يساعدك هذا!

إذا كنت تحاول تشغيل ملف دفعي يحتوي على مسارات نسبية أثناء عملية التثبيت، فستفشل ذلك بالتأكيد. ذلك لأن ملف الدفعات سيسعل في الاعتبار الدليل حيث يعمل المثبت، وليس حيث تم تثبيت الملفات. استخدم Builders Installer الذي نسخ ملفات الدفعات إلى دليل مؤقت.

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