2009-08-12 14 views
5

मैं कैसे WiX में कुछ अतिरिक्त फ़ाइलों के साथ एक सेवा स्थापित करते हैं, और क्या परिभाषित फ़ाइल वास्तविक सेवा EXE फ़ाइल है?एक बहु फ़ाइल NT सेवा का उपयोग कर स्थापित कर रहा है WiX (2.0)

परिदृश्य: मैं एक सेवा है जो सिर्फ एक EXE फ़ाइल था, और इस कोड के साथ WiX में एक Windows NT सेवा के रूप में यह स्थापित:

<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 है - यह एक से अधिक फ़ाइलों, 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> 

लेकिन फिर मेरी "फ्रेमवर्क। dll "बनाया जा रहा सेवा के लिए स्रोत पथ के रूप में स्थापित हो जाता है ........

तो मैंने सोचा कि मैं, वास्तव में सेवा स्थापित करने के लिए एक दूसरे घटक बनाएंगे ServiceInstall का उपयोग कर , और मैं केवल FileRef का उपयोग कर उस सेवा EXE फ़ाइल का संदर्भ दूंगा - लेकिन ऐसा प्रतीत नहीं होता है (कम से कम 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 लेखक होगा फ़ाइलों के घटक के सूची से सही EXE फ़ाइल (नहीं बस किसी भी मनमाने ढंग से फ़ाइल लेने के लिए सभी आवश्यक फ़ाइलों को स्थापित करने के लिए, और अभी भी मिल NT सेवा स्थापना है) ??

मार्क

+1

आप मुख्यपथ = 'हां' फ़ाइल तत्व में exe पर स्थापित करने के लिए भूल गया था। –

+0

धन्यवाद, शै - रॉब का जवाब आपके कथन की पुष्टि करने लगता है - बहुत सराहना की! –

उत्तर

7

ServiceInstall तत्व घटक के "मुख्यपथ" करने के लिए ServiceInstall ओर इशारा करते हुए खत्म हो जाएगा में है। डिफ़ॉल्ट रूप से WiX टूलसेट मुख्यपथ के रुप में अपने घटक में पहली फ़ाइल या RegistryKey तत्व चुनता है। जब आपने अपने घटक में फ़ाइलों को जोड़ा, तो सूची के शीर्ष पर .dll कुंजीपैथ बन गया।

सामान्य में, छोटे घटक बड़े लोगों से बेहतर हैं। तो एक बेहतर समाधान आपके डीएलएल को अलग घटक में रखना होगा। फिर आप एक ही घटक में .exe फ़ाइल तत्व और ServiceInstall तत्व छोड़ सकते हैं। यह सब बहुत साफ बनाता है।

यदि आप फिर "सेवा" को एक साथ समूहित करना चाहते हैं, तो आप एक घटक समूह तत्व बना सकते हैं और .exe और .dll घटकों में ComponentRefs डाल सकते हैं। अब आपके पास एक ऐसी चीज है जिसे आप फीचर/कंपोनेंट ग्रुपरफ से संदर्भित कर सकते हैं।

+0

+1 ग्रेट स्पष्टीकरण - बहुत बहुत धन्यवाद, रोब! मैंने तदनुसार अपनी वाईएक्स स्क्रिप्ट बदल दी और रात के निर्माण के बाद कल रिपोर्ट की जाएगी और इंस्टॉलेशन का परीक्षण किया गया है :-) –

+0

हां, पुष्टि की गई - "कीपैथ = 'हां'" को जोड़कर मेरी समस्या हल हो गई - इंस्टॉल काम पर वापस आ गया है बस ठीक है - बहुत बहुत धन्यवाद, रोब! –

संबंधित मुद्दे