سؤال

لقد كنت أحاول تحديد أفضل حل لحالة لتسجيل خادم COM باستخدام WIX لإنشاء حزمة تثبيت Windows وأكافح.

في هذا المنصب أرشيف هندسة النشر: Howto: استخدم REGSVR32.EXE مع WIX, ، هناك طلب مفتوح لـ "Police Setup Police" لإقامة استخدام REGSVR32 من خلال إجراء مخصص EXE. أنا أعرف شرور الاستخدام regsvr32 نظرًا لأنه يسجل النظام بدلاً من المستخدم ، لكنني أتذكر ذلك أيضًا OleSelfRegister يمكن أن يكون لديك مشكلات من نشرة دعم Microsoft (آسف ، لا يمكن العثور على الرابط) - وأعتقد أنهم أوصوا باستخدامه regsvr32.

اي نصيحه؟

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

المحلول

اقرأ "لا تستخدم طاولات selfresreg و typelib" على:

https://msdn.microsoft.com/en-us/library/bb204770#no_selfreg

من أجل WIX ، ألق نظرة على مكون عنصر في مرجع المخطط في:

http://wixtoolset.org/documentation/manual/v3/xsd/wix/component.html

لاحظ بعض عناصر الأطفال مثل appid, فصل, بروغ, السجل وهلم جرا. التقنية المناسبة هي الاستخدام COM extraction لتعكس معلومات التسجيل وتنبعثها بشكل معني في المثبت الخاص بك حتى تتمكن MSI من الاعتناء بها من أجلك دون الخروج من العملية إلى بعض الكود (مثل DllRegisterServer()) التي قد تفشل وأيضًا لا توفر رؤية MSI في بصمة المكون من منظور الإصلاح والإعلان.

نصائح أخرى

هناك أداة "الشحم" المدرجة مع WIX. يمكنك استخدامه لإنشاء إدخالات التسجيل الصحيحة تلقائيًا. ثم يمكنك فقط تكوين تثبيت WIX لك لكتابة هذه الإدخالات. لا ينبغي استخدام Selfgres.

كما أشار Trampster ، لا تقوم Heat.exe بعمل جيد في حصاد إدخالات سجل من خوادم COM. حاولت ولكن النتائج كانت غير مكتملة.

بدلاً من ذلك ، باتباع النصيحة في وصول سجل مراقبة (أدوات installsite: المراقبة), ، كنت installshield regspyui. هذا يفترض أنه يشحن مع إصدارات من InstallShield V7 وما بعده ، بما في ذلك إصدار التقييم. قد تكون هذه المعلومات قديمة ؛ أستطيع أن أؤكد أنه كذلك ليس يتم توفيرها مع intershield LE غير المجدية التي تأتي مع VS2013.

لحسن الحظ ، لدي نسخة من InstallShield 2010 ، وقد جاء ذلك مع RegSpyui.

على أي حال ، كان Regspyui نسيمًا لاستخدامه: قم بتوجيهه إلى com .exe ، استخرج معلومات التسجيل إلى ملف .reg. ثم استخدم الحرارة لحصد هذا في ملف .wxs يمكنك إضافته إلى مشروع WIX الخاص بك

heat reg <some.reg> -gg -o <some.wxs>

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

على سبيل المثال ، إذا كان ملف .wxs الذي تم إنشاؤه بواسطة regspyui+Heat لديه شيء من هذا القبيل

<Fragment>
    <DirectoryRef Id="TARGETDIR">
        <Component Id="blah" Guid="{xxxxxxxxxxxxxxxxxxxxxxxxx}" KeyPath="yes">
            <RegistryKey Key="TypeLib\{xxxxxxxxxxxxxxxxxxxxxx}\4.1\0\win32" Root="HKCR">
                <RegistryValue Value="C:\Users\you\projects\MyProject\dependencies\installation\COMFOO.exe" Type="string" />
            </RegistryKey>
        </Component>
    </DirectoryRef>
</Fragment>

وأنت تقوم بالتثبيت في ملف WIX الرئيسي الخاص بك إلى

<Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="ProgramFilesFolder" Name="PFiles">
            <Directory Id="COMPANY" Name="My Company">
                <!--This is the actual installation folder-->
                <Directory Name="MyProduct" Id="MYPRODUCT">

ثم ببساطة تحرير مسار القيمة@registryValue@إلى ... "[MYPRODUCT]\COMFOO.exe"

لا يوجد سوى عيب واحد في هذا: التسجيل wix com مع Heat.exe لا يعمل لخوادم .exe com. يبدو أن InstallShield وأدواته تدعمها ، لكن RegSpyui هي مجرد أداة واجهة المستخدم ، وليس أداة يمكنني تشغيلها على جهاز البناء الخاص بي.

جرب هذا:

  1. إنشاء مشروع .NET جديد
  2. أضف مرجعًا للمشروع إلى المرشح com dll أو OOP exe الذي تريد جمعه WXS
  3. ابحث عن الملف Interop.candidate.dll (في ال obj\debug مجلد)
  4. قم بتشغيل أداة Wix Heat على DLL Interop التي وجدتها للتو.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top