سؤال

كيف يمكنني تثبيت خدمة مع بعض الملفات الإضافية في WIX، وحدد الملف هو ملف EXE الخدمة الفعلي؟

السيناريو: كان لدي خدمة كانت مجرد ملف exe واحد، وتثبيته كخدمة Windows NT في WIX مع هذا الرمز:

<Component Id='InstallMyServiceComponent' Guid='{....}' DiskId='1'>
   <File Id='InstallMyServiceEXEFile' LongName='MyService.exe' 
         Name='MyServ.exe' src='MyService/bin/release/MyService.exe' KeyPath='yes'/>
   <ServiceInstall Id='InstallMyService' Name='MyService' Description='My Service'
         ErrorControl='normal' Start='auto' Type='ownProcess' Vital='yes' />
   <ServiceControl Id='UninstallMyService' Name='MyService' Remove='uninstall' 
         Wait='yes' />
</Component>
<Component Id='RunMyServiceComponent' Guid='.......'>
   <ServiceControl Id='RunMyService' Name='MyService' Start='install' 
         Stop='uninstall' Wait='no' />
</Component>

وكان لدي ميزة ستسمح بعد ذلك بتثبيت هذه الخدمة وبدء اختيار هذه الخدمة اختياريا.

الآن، مشكلتي هي - الآن نمت خدمتي، والخروج الوحيد لم يعد exe واحد - إنها ملفات متعددة، exe، dll، وملفات دعم قليلة.

ومع ذلك، كيف يمكنني تثبيت ذلك الآن؟

حاولت أن يكون لديك مكون مع كل ملفاتي

<Component Id="MyService" Guid="......" DiskId="1">
  <File Id="fileMyService_framework_dll" LongName="Framework.dll" 
        Name="Framewrk.DLL" src="MyService\Framework.dll" />
  <File Id="fileMyService_dal_dll" LongName="MyServiceDAL.dll" 
        Name="SrvcDAL.DLL" src="MyService\ServiceDAL.dll" />
  <File Id="fileMyService_helpers_dll" LongName="Helpers.dll" 
        Name="Helpers.DLL" src="MyService\Helpers.dll" />
  <File Id="fileMyService_exe" LongName="MyService.exe" 
        Name="MySrv.EXE" src="MyService\MyService.exe" />
</Component>

أولا، حاولت إضافة علامات ServiceInstall و ServiceControl إلى هذا المكون:

<Component Id="MyService" Guid="......" DiskId="1">
  <File Id="fileMyService_framework_dll" LongName="Framework.dll" 
        Name="Framewrk.DLL" src="MyService\Framework.dll" />
  <File Id="fileMyService_dal_dll" LongName="MyServiceDAL.dll" 
        Name="SrvcDAL.DLL" src="MyService\ServiceDAL.dll" />
  <File Id="fileMyService_helpers_dll" LongName="Helpers.dll" 
        Name="Helpers.DLL" src="MyService\Helpers.dll" />
  <File Id="fileMyService_exe" LongName="MyService.exe" 
        Name="MySrv.EXE" src="MyService\MyService.exe" />
   <ServiceInstall Id='InstallMyService' Name='MyService' 
        Description='My Service' ErrorControl='normal' Start='auto' 
        Type='ownProcess' Vital='yes' />
   <ServiceControl Id='UninstallMyService' Name='MyService' 
        Remove='uninstall' Wait='yes' />
</Component>

ولكن بعد ذلك، يتم تعيين "Framework.dll" كمسار مصدر للخدمة التي يتم إنشاؤها ........

لذلك اعتقدت أنني كنت أقوم بإنشاء مكون ثان لتثبيت الخدمة فعليا، باستخدام ServiceInstall، وأقرت بالإشارة إلى ملف خدمة EXE باستخدام Fileref - ولكن هذا لا يبدو أنه موجود (على الأقل في WIX2).

<Component Id='InstallMyServiceComponent' Guid='{....}' DiskId='1'>
   <FileRef Id='fileMyService_exe' KeyPath='yes'/>
   <ServiceInstall Id='InstallMyService' Name='MyService' 
         Description='My Service' ErrorControl='normal' Start='auto' 
         Type='ownProcess' Vital='yes' />
   <ServiceControl Id='UninstallMyService' Name='MyService' 
         Remove='uninstall' Wait='yes' />
</Component>

لذلك - ما هو مؤلف WIX الفقراء Gotta القيام به لتثبيت جميع الملفات اللازمة، ولا يزال يحصل على تثبيت خدمة NT لالتقاط ملف EXE الصحيح (ليس فقط أي ملف تعسفي من قائمة المكونات بالملفات)؟

مارك

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

المحلول

سينتهي عنوان ServiceInstall إلى الإشارة إلى "keypath" للمكونات التي يتم فيها تشغيل ServiceInStall. افتراضيا، يختار مجموعة أدوات WIX أول عنصر أو عنصر RegistryKey في مكونك كمخطوط KeyPath. عند إضافة ملفات إلى مكونك، أصبح .dll في الجزء العلوي من القائمة أصبح keypath.

بشكل عام، مكونات أصغر أفضل من الأكبر. لذلك سيكون هناك حل أفضل لوضع DLLs في مكونات منفصلة. ثم يمكنك ترك عنصر ملف .exe وعنصر ServiceInstall في نفس المكون. هذا يجعل كل شيء نظيف جدا.

إذا كنت تريد بعد ذلك مجمعة "الخدمة" معا، فيمكنك إنشاء عنصر ComponentGroup ووضع ComponentRefs إلى مكونات .exe و .dll. الآن لديك شيء واحد يمكنك الرجوع إليه من ميزة / componentgrouprefref.

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