سؤال

لقد وجدت مثالاً على تسجيل DLLs ، تسجيل مجموعة لـ COM interop في ملف MSI مع مجموعة أدوات XML المثبت Windows., و Wix يشتكي من سمة "assemblyRegisterCominInterop".

لقد قمت بإزالة ذلك وقمت بتغيير سمة "التجميع" إلى Win32 ، وتقول إنني بحاجة إلى تحديد سمة AssemblyManifest ، لكن ما الذي يجب أن أضعه هناك؟

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

المحلول

أسهل طريقة (و Rob M سوف يهتز ويهتز حول كيفية ذلك خاطئ - ظلم - يظلم) هو فقط للاستخدام SelfRegCost=1 على علامة الملف لـ DLL.

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

هذا خطأ أيضًا ، لأن هذا يعني أن نظام تثبيت Windows لا يعرف شيئًا عن مفاتيح التسجيل هذه ، وما ينبغي ولا ينبغي أن يكون هناك. هذا يعني أن الإصلاح لن يعمل ، وربما لا يتم تنظيف التثبيت بشكل صحيح ، إلخ.

خلاف ذلك ، يمكنك إنشاء رمز WIX المناسب من خلال الإشارة heat.exe في DLL الخاص بك ، ودمج إخراجها في مشروع WIX الحالي. ستحصل على مجموعة متنوعة من علامات الفصول الدراسية والبروغ والطاعون والتسجيل. قد تحتاج إلى تحرير هذا الإخراج يدويًا للحصول على تجميعه.

أتمنى أن يساعد ذلك.

نصائح أخرى

ليس أنا فقط هو الذي سوف يصدق ويهذيان عن مدى الشر ، يمنحك MSI SDK قائمة سبعة أسباب عدم استخدام Selfger.

مثال:

<Component Id="Component" Guid="*">
    <File Source="ComServer.dll">
        <Class Id="PUT-CLSID-HERE" Context="InprocServer32" ThreadingModel="apartment" Description="Your server description">
            <ProgId Id="Your.Server.1" Description="Your ProgId description">
                <ProgId Id="Your.Server" Description="Your ProgId description" />
            </ProgId>
        </Class>

        <Class Id="PUT-PROXY-CLSID-HERE" Context="InprocServer32" ThreadingModel="both" Description="Your server Proxies, assuming you have them">
            <Interface Id="PUT-INTERFACEID-HERE" Name="IInterface1" />
            <Interface Id="PUT-INTERFACEID-HERE" Name="IInterface2" />
            <Interface Id="PUT-INTERFACEID-HERE" Name="IInterface3" />
            <Interface Id="PUT-INTERFACEID-HERE" Name="IInterface4" />
        </Class>
    </File>
</Component>

في النهاية ، إجابة تروي صحيحة.

يمكنك محاولة استخدام برنامج Heat.exe ، ثم الرجوع إلى الشظية في رمز Wix الخاص بك.

 heat.exe file <filename> -out <output wxs file>

كما في:

 heat.exe file my.dll -out my.wxs
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top