سؤال

لا أواجه أي نجاح في تعديل MSI Windows Installer لتشغيل ملف دفعي بعد تثبيت الإخراج الأساسي. لقد بحثت عن هذا ووجدت العديد من الاقتراحات، ولكن لا شيء يعمل.

أضف إجراء مخصص
يمكن أن تكون الإجراءات المخصصة فقط الملفات القابلة للتنفيذ. ملف دفعي غير قابل للتنفيذ.

قم بإنشاء مضيف Windows Scripting القابل للتنفيذ الذي يقوم بتشغيل ملف الدفعات
حاول كثير من الناس القيام بذلك، بما في ذلك لذا, ، ولا أحد يستطيع الحصول على هذا للعمل.

استخدم WIX أو InstallShield
ليس لدي الوقت أو السلطة لتغيير تقنية تثبيت الشركة.

قم بتحرير .msi باستخدام Orca وإضافة خاصية مخصصة، ثم إجراء مخصص، ثم قم بتحرير Installexecutesequence، ...
لقد كنت أحاول ذلك لساعات ولم يتم إنشاء مثبتات فقط رمي خطأ في النظام عند تشغيلها.
هل كانت مفيدة؟

المحلول

ما قلته أعلاه غير صحيح:

يمكن أن تكون الإجراءات المخصصة فقط الملفات القابلة للتنفيذ. ملف دفعي غير قابل للتنفيذ.

يمكن أن تكون الإجراءات المخصصة (حتى بدون أدوات مثل InstallShield) .exe أو VBScript أو JScript أو DLL. إذا كتبت DLL، فيمكنك كتابة أي رمز تريد استدعاء ملف دفعي أو إجراء أي تغييرات تريد النظام - لا يوجد حد.

تحديث: مثال يعمل بالنسبة لي: (إدخال جدول الخدمة)

Action Test
Type 34
Source SystemFolder
Target cmd.exe /c c:\test.bat
ExtendedType <blank>

نصائح أخرى

كنت قادرا على حل هذا عن طريق إنشاء EXE يتكون أساسا من:

System.Diagnostics.Process.Start(pathToBatchFile);

إضافة EXE إلى ملف MSI ثم تشغيله كإجراء مخصص.

في حين أن الإجابة التي اقترحها "William Teara" هي بداية جيدة للغاية، فقد وجدت حلا أفضل هنا يستحق الذكر.

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

بعض الملاحظات:

  1. يستخدم الهدف بدلاً من اندلع
  2. تأكد من اقتباس المسارات.

هذه هي إجراءتي المخصصة. في حالتي أريد أن أجبر محلي معالج القيادة لإصلاح عدد قليل من إدخالات التسجيل، وبالتالي لا أستخدمها comspec..

يؤدي الإجراء الأول (النوع 50) الأمر في المصدر مع وجود حجج المدخلات للهدف، لأن النوع هو 50 + 1024 + 2048 لأنه يتم تأجيل العمل مع noimpersonate. علَم.

  • عمل: الانتهاء
  • يكتب: 3122
  • مصدر: نوم
  • هدف: / c "c" [targetdir] fixup.bat "

الإجراء الثاني يحدد نوم الممتلكات على الفور:

  • عمل: النهائيين
  • يكتب: 51
  • مصدر: نوم
  • هدف: windowsfolder] system32 cmd.exe

ثم يجب عليك إضافة هذه الإجراءات إلى installexecutesequence.:

  • عمل: الانتهاء
  • شرط: غير مثبت
  • تسلسل: 5002

و هذه:

  • عمل: النهائيين
  • شرط:
  • تسلسل: 5001

لاحظ أنه في حالتي، يمكنني بسهولة تعديل الإجراءات للاتصال Reg.exe استيراد Fixup.reg. جدا. وأخيرا يمكن للمرء استخدام msitran. كما هو مقترح هنا في منشور بناء لأتمتة الإجراء.

اجعل EXE يجعل ملف مؤقت مؤقت لتغييره إلى دليل ما تريده و CALL ملف الخفافيش الآخر الذي يفعل ما تحتاجه.

أخبر الإجراء المخصص لاستخدام هذا exe.

الحجة الأولى إلى EXE CPP هي الطريق إلى EXE نفسه. يمكن استخدام هذا لتوجيه نفسك، وأن هذه المعلومات يمكن استخدامها في صنع المؤقتة.

في حالتي، أضفت "إجراءات مخصصة".
على مجلد "تثبيت" اختر "إضافة إجراء مخصص"
اختر cmd.exe (c: windows system32 cmd.exe)
ثم في خصائص CMD.EXE تحرير "الحجج" ل
"/ install / c c: myapp.exe - exec-action"

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