2010-02-24 11 views
6

स्थापित होने के बाद मैं निम्नलिखित WiX स्निपेट: लांच आवेदन:कि की आवश्यकता होती एक कस्टम क्रिया का कार्यान्वयन

<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOX" Value="1" /> 
<CustomAction Id="StartAppOnExit" 
       FileKey="Configurator.exe" 
       ExeCommand="" 
       Execute="immediate" 
       Impersonate="yes" 
       Return="asyncNoWait" /> 
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" 
      Value="Configure initial settings" /> 
<UI> 
    <Publish Dialog="ExitDialog" 
      Control="Finish" 
      Order="1" 
      Event="DoAction" 
      Value="StartAppOnExit" 
    >WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish> 
</UI> 

मूल रूप से बाहर निकलने के संवाद पर मैं एक बॉक्स में वह प्रदर्शित करते हैं। नोट: इस एप्लिकेशन को उन्नयन की आवश्यकता है। यह सब एक झटके को छोड़कर ठीक काम करता है। यदि यूएसी सक्षम है तो ऐसा लगता है कि एमएसआई उपयोगकर्ता टोकन के साथ घूमता है और अपने समूहों को स्ट्रिप्स करता है, इसलिए जब वह उस एप्लिकेशन को लॉन्च करने का प्रयास करता है जिसके लिए ऊंचाई की आवश्यकता होती है तो यह अब एक विकल्प नहीं है।

मैं इसे काम करने के लिए एक साथ कैसे स्ट्रिंग कर सकता हूं?

मैंने एक प्रतिरूपण = "नहीं" चकने की कोशिश की, लेकिन इस काम पर काम करने के लिए बहुत देर हो चुकी है।

उत्तर

12

यूआई अनुक्रम सीमित उपयोगकर्ता के रूप में चल रहा है, और यह अनुप्रयोगों को CreateProcess पर कॉल के साथ लॉन्च करता है। यदि आप इसके बजाय WixShellExec जैसे [WixShellExecTarget] के साथ कुछ उपयोग करते हैं, तो यह एक्सप्लोरर की तरह कार्य करेगा और लक्ष्य को ऊंचाई की आवश्यकता होने पर यूएसी प्रॉम्प्ट दिखाएगा। या आप अपने कॉन्फ़िगरेटर.एक्सई को उन्नत विशेषाधिकारों के बिना लॉन्च करने की अनुमति देने के लिए संशोधित कर सकते हैं, उस मामले का पता लगा सकते हैं, और ऊंचे विशेषाधिकारों के साथ खुद को फिर से लॉन्च कर सकते हैं।

उदाहरण के लिए, यह काम करना चाहिए:

<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOX" Value="1" /> 
<CustomAction Id="StartAppOnExit" BinaryKey="WixCA" DllEntry="WixShellExec" Execute="immediate" Return="check" Impersonate="yes"/> 
<Property Id="WixShellExecTarget" Value="[#Configurator.exe]"/> 
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Configure initial settings" /> 
<UI> 
    <Publish Dialog="ExitDialog" Control="Finish" Order="1" Event="DoAction" Value="StartAppOnExit">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish> 
</UI> 
0

FYI करें, तत्काल कस्टम कार्यों हमेशा प्रतिरूपित (यानी वे हमेशा उपयोगकर्ता के लिए जो एमएसआई कार्यान्वित के रूप में चलाने)।

मुझे आपके कॉन्फ़िगरेटर.एक्सई को ऊंचाई समस्या को संभालने के बारे में माइकल उर्मन के विचार पसंद हैं।

मुझे आश्चर्य है कि क्या आप अपने EXE में एक मैनिफेस्ट भी शामिल कर सकते हैं ताकि ओएस जानता है कि ऊंचाई हमेशा आवश्यक है।

+2

आपके आश्चर्य के बारे में, समस्या ऊंचाई की आवश्यकता का संयोजन है, और तथ्य यह है कि CreateProcess प्रक्रियाओं को बढ़ा नहीं सकता है। इसके बजाय CreateProcess ERROR_ELEVATION_REQUIRED लौटाता है, जो कस्टम कोड संभाल सकता है। विंडोज इंस्टालर सिर्फ त्रुटि की रिपोर्ट करता है। –

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