كيفية إجبار Windows Installer على استبدال اختصار باختصار واحد؟

StackOverflow https://stackoverflow.com/questions/4622205

  •  30-09-2019
  •  | 
  •  

سؤال

في الآونة الأخيرة ، أضفنا ميزة إلى المثبت الخاص بنا والتي تطلبت إعادة تسمية اختصارات سطح المكتب قليلاً (تمت إضافة رقم الإصدار إلى الاسم). أواجه مشاكل في الحصول على المثبت لاستبدال الاختصارات القديمة بالاختصارات الجديدة. عندما تم الإبلاغ عن المشكلة في البداية ، تم تثبيت الاختصارات الجديدة ، ولكن لم تتم إزالة تلك القديمة. بعد العمل على المشكلة ، أواجه مشكلة مختلطة: يتم إزالة أحد الاختصارات القديمة (حتى الآن ، جيد جدًا) ، لكن الآخر ليس (ليس جيدًا) ، وفي كلتا الحالتين ، الاختصارات الجديدة لا يتم تثبيتها (أسوأ). لقد حاولت تغيير GUID على كل من المكونات التي تثبت هذه الاختصارات ، وحتى ، في وقت ما ، حاولت تغيير خاصية رمز المنتج في كل من وحدات الدمج المسؤولة عن الاختصارات ، ولكن لا شيء يبدو أنه يحصل على المطلوب السلوك (مع القديم ودخل مع الجديد عند الترقية).

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

...
MSI (s) (E0:70) [16:49:21:921]: Component: DesktopFolderX.04E48C43_FFCB_42AC_AC59_1D96BEC85C17; Installed: Absent;   Request: Local;   Action: Local
...
MSI (s) (E0:70) [16:49:21:921]: Component: DesktopFolderX.25696C3E_819B_4675_BEE2_C36D2B5CB521; Installed: Absent;   Request: Local;   Action: Local
...
MSI (s) (E0:C0) [17:02:18:390]: Component: DesktopFolder.25696C3E_819B_4675_BEE2_C36D2B5CB521; Installed: Local;   Request: Absent;   Action: Absent
...
MSI (s) (E0:C0) [17:02:18:390]: Component: DesktopFolder.04E48C43_FFCB_42AC_AC59_1D96BEC85C17; Installed: Local;   Request: Absent;   Action: Null
...

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

لمعلوماتك: بيئة Dev الخاصة بي هي استوديو التثبيت الحكيم 7.0.

يحرر: لقد قمت بإعادة ضبط كل شيء على ما كان عليه سابقًا ، باستثناء Productionversion و ProductCode الحالي. بعد القيام بذلك ، يترك المثبت الاختصارات القديمة المثبتة ولكن لا يقوم بتثبيت الاختصارات الجديدة. (هذا سلوك مختلف عما تم الإبلاغ عنه في الأصل والذي تمكنت من تكراره ، أي أن الاختصارات القديمة قد تركت مثبتة ، وتم تثبيت تلك (المعاد تسميتها) الجديدة أيضًا.) بعد إعادة توجيه المكونين ذوي الصلة ، يزيل الاختصارات القديمة ولكن لا يزال لا يثبت الاختصارات الجديدة. (هذا ما يحدث على XP.)

الخطوط ذات الصلة في السجل بعد إعادة توجيه المكونات هي كما يلي:

...
MSI (s) (80:EC) [10:48:31:091]: Component: DesktopFolder.25696C3E_819B_4675_BEE2_C36D2B5CB521; Installed: Absent;   Request: Local;   Action: Local
...
MSI (s) (80:EC) [10:48:31:091]: Component: DesktopFolder.04E48C43_FFCB_42AC_AC59_1D96BEC85C17; Installed: Absent;   Request: Local;   Action: Local
...
MSI (s) (80:0C) [11:04:22:882]: Component: DesktopFolder.25696C3E_819B_4675_BEE2_C36D2B5CB521; Installed: Local;   Request: Absent;   Action: Absent
...
MSI (s) (80:0C) [11:04:22:882]: Component: DesktopFolder.04E48C43_FFCB_42AC_AC59_1D96BEC85C17; Installed: Local;   Request: Absent;   Action: Absent
...

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

عندما يتم تكرار نسخة المثبت التي يمكن تشغيل المشكلة الأصلية (كل من الاختصارات القديمة والجديدة بعد الترقية) ، يتم تشغيل الإجراء المبلغ عنه في الخطين الأخيرين أعلاه بدلاً من الغياب.

تحرير 2: السلوك الحالي هو أن الاختصارات القديمة تظل مثبتة ، وأنها غير مثبتة. عندما أقوم بإعادة توجيه مكوناتها ، تتم إزالة الاختصارات القديمة ، ولا تزال تلك الجديدة غير مثبتة. جربت حلول كريستوفر بينتر ، لكن لم يذهب أي منهما إلى أي مكان. (انظر تعليقي على هذه الإجابة.) يجب أن تكون هناك وسيلة للحصول على اختصارات الإصدار الجديدة المثبتة بدلاً من تلك القديمة غير المرئية. هل هناك أي شخص يمكن أن يوفر حلًا يعمل؟

تحرير 3: كما اتضح ، كان السلوك الجديد الذي لم يتم تثبيت الاختصارات الجديدة بسبب خطأ ارتكبه في الحصول على الملفات المصدر ، وتلك التي دخلت في المثبت لم تكن محدثة مثل تلك كان من المقرر استبدالها. بمجرد أن يتم تجميع أحدث الملفات في المثبت ، تمكنت من الحصول على النتائج المرجوة (اختصارات قديمة ، جديدة في). (انظر إجابتي لمزيد من المعلومات.)

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

المحلول 2

نظرًا لأننا نعيد كل شيء لكل معدل دوران (رقم البناء يتزايد دائمًا) ، فهي ترقية كبيرة فيما يتعلق بـ Wi ، لذلك بمجرد أن أحصل على أحدث ملفات في التثبيت ، قم بتجديد المكونات التي تحتوي على سطح المكتب حققت الاختصارات التي تحتاج إلى استبدال النتائج التي كنت بعدها.

نصائح أخرى

الاختصار هو مجرد ملف .lnk في دليل. لا تقوم بإعادة تسمية اختصار ، يمكنك حذفه وإنشاء تقنية جديدة. إذا قمت بترقية كبيرة ، فيجب على الإزالة / إعادة التثبيت التعامل مع هذا ، ولكن إذا كنت تقوم بترقية بسيطة ، فستترك القديم وراء ذلك لأن MSI الجديد لا يعرف ذلك.

احتمالان:

1) استخدم جدول الإزالة للتخلص من الاختصار القديم.

2) احتفظ بالمكون القديم مع الملف القديم واستخدم السمة المتعدية مع حالة عدم وجود OP (Google كيفية حذف ملف في ترقية طفيفة ويعرف أيضًا باسم مكون مكون ثقب) لإزالة المكون ويتم إزالة الملف / الاختصار. قم بإنشاء مكون جديد يحمل اسم ملف جديد واسم اختصار جديد ليتم تثبيته للحصول على الاختصار الجديد.

أعتقد أنني سأحاول رقم 1 أولاً. :-)

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