2010-03-23 16 views
6

में पैरामीटरेट सेवा प्रारंभ विकल्प मेरे पास एक WiX इंस्टॉलर में एक ServiceInstall घटक है जहां मुझे एमएसआई में पारित पैरामीटर के आधार पर ऑटो या मांग शुरू करने की आवश्यकता है।वाईएक्स इंस्टॉलर

तो सवाल में XML तत्व

<ServiceInstall Vital="yes" 
    Name="My Windows Service" 
    Type="ownProcess" 
    Account="[SERVICEUSERDOMAIN]\[SERVICEUSERNAME]" 
    DisplayName="My Service" 
    Password="[SERVICEUSERPASSWORD]" 
    Start="demand" 
    Interactive="no" 
    Description="Something interesting here" 
    Id="Service" 
    ErrorControl="ignore"></ServiceInstall> 

WiX तो इम पूरी तरह से एक शर्त के साथ घटक suplicating के साथ फंस प्रारंभ विशेषता के लिए एक पैरामीटर का उपयोग करने की अनुमति नहीं होगी, जैसे/

<Component Id="ServiceDemand" 
       Guid="{E204A71D-B0EB-4af0-96DB-9823605050C7}" > 
     <Condition>SERVICESTART="demand"</Condition>  
... 
है

और स्टार्ट और एक अलग स्थिति के लिए एक अलग सेटिंग के साथ, पूरे घटक को पूरी तरह डुप्लिकेट करना।

कोई भी अधिक सुरुचिपूर्ण समाधान के बारे में जानता है? एक जहां मुझे दो कॉम्पोनेंट बनाए रखना नहीं है, वैसे ही शुरुआत के लिए विशेषता को छोड़कर वही काम करता है?

+0

आउच के लिए वांछित नाम है, उस तरह की बेकार है। मुझे लगता है कि आप उस दृष्टिकोण से फंस गए हैं जिसका आप वर्तमान में उपयोग कर रहे हैं जब तक कोई वाईएक्स में ठीक न हो जाए। –

उत्तर

6

ServiceInstall तालिका में प्रारंभ फ़ील्ड स्वरूपित नहीं है, इसलिए आप किसी संपत्ति के साथ जो डाल रहे हैं वह काम नहीं करेगा। इस लिंक में कुछ उपयोगी सुझाव हैं जो आपको इसके माध्यम से प्राप्त कर सकते हैं: ServiceInstall - Start element। ऐसा लगता है कि जिस व्यक्ति ने पोस्ट किया था वह वही मुद्दा था। मेरा पसंदीदा सुझाव यह है कि एक कस्टम एक्शन बनाना है जो इंस्टॉल सर्विसेज एक्शन से पहले चलता है जो सर्विस इंस्टॉल टेबल में स्टार्ट एलिमेंट के मान को बदल देगा।

अपडेट: सुझाए गए साइट पर लिंक संशोधित करें।

+0

लिंक/जानकारी के लिए धन्यवाद। मुझे लगता है कि एक सीए के साथ सुझाव दिया जाएगा। – Jamiec

+0

मुझे लगता है कि उन लोगों द्वारा मेरे बहुत सारे प्रश्नों का उत्तर दिया जा सकता है। यहां एक और अच्छी साइट है जिसका मैं अक्सर उपयोग करता हूं। http://blogs.technet.com/alexshev/pages/from-msi-to-wix.aspx –

+0

अबबल लिंक अब टूटा हुआ है। ServiceInstall-Start-element पर खोजें आपको विक्स या नब्बल पर स्थानांतरित दस्तावेज़ के लिए एक लिंक प्राप्त करना चाहिए। –

0

दुर्भाग्य से सेवाओं को स्थापित करने और नियंत्रित करने के लिए मानक Wix कार्यक्षमता बहुत सीमित है।

हालांकि आदर्श नहीं है, लेकिन यह CAQuietExec (जो भी सुविधा है, तो आप एक का उपयोग स्थापना लॉग फ़ाइल के लिए उत्पादन की बचत होती है) का उपयोग कर CustomAction उपयोग किया जा सकता उदाहरण के लिए,

<CustomAction Id="QtExec_Install_Cmd" Property="QtExec_Install" Value="sc create [SERVICE_NAME] binPath=&quot;[INSTALLFOLDER]$(var.MAIN_EXECUTABLE)&quot; start=[SERVICE_START_FLAG]" Execute="immediate" /> 
    <CustomAction Id="QtExec_Install" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="check" Impersonate="no" /> 
    <CustomAction Id="QtExec_Uninstall_Cmd" Property="QtExec_Uninstall" Value="sc delete [SERVICE_NAME]" Execute="immediate" /> 
    <CustomAction Id="QtExec_Uninstall" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="check" Impersonate="no" /> 
    <InstallExecuteSequence> 
    <Custom Action="QtExec_Install_Cmd" After="CostFinalize"/> 
    <Custom Action="QtExec_Install" After="InstallServices">&amp;WindowsService=3</Custom> 
    <Custom Action="QtExec_Uninstall_Cmd" After="CostFinalize"/> 
    <Custom Action='QtExec_Uninstall' Before="RemoveFiles">NOT &amp;WindowsService=3 AND NOT &amp;WindowsService=-1</Custom> 
    </InstallExecuteSequence> 

नोट:

  • विंडोज सेवा सुविधा

  • SERVICE_START_FLAG वह संपत्ति है जो सेवा शुरू करने के लिए नियंत्रित करती है

  • [INSTALLFOLDER] $ (var.MAIN_EXECUTABLE) - एक्ज़िक्यूटेबल में पथ

  • SERVICE_NAME Windows सेवा

+0

वाह धन्यवाद। लगभग 7 साल देर हो चुकी है, लेकिन मुझे यकीन है कि यह किसी की मदद करेगा :) – Jamiec

+0

हाहा ... मैं अब उम्र के लिए विक्स का उपयोग कर रहा हूं ... शायद अब रोकना चाहिए ... यह शर्म की बात है कि कोई उचित विकल्प नहीं है माइक्रोसॉफ्ट, और आपका प्रश्न अभी भी मान्य है। – Ivan

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