2011-02-11 12 views
13

मैं एक WiX सेटअप चलाते समय कार्रवाइयों की सूची और उनके अनुक्रम की तलाश में था। किसी भी तरह आधिकारिक वेबसाइट कोई जानकारी प्रदान नहीं कर रही है।वाईएक्स एक्शन अनुक्रम

मूल समस्या यह है कि मैं अपने कस्टम कार्यों को सही तरीके से शेड्यूल करना चाहता हूं। आम तौर पर मुझे regsvr32.exe के साथ एक डीएलएल पंजीकृत करने की आवश्यकता होती है, और यह केवल तभी किया जा सकता है जब फ़ाइलों को हार्डड्राइव में कॉपी किया जाता है। हालांकि कस्टम एक्शन

<Custom Action="RegisterShellExt" After="InstallFiles"> 

त्रुटि संदेश "फ़ाइल नहीं मिली" में विफल रहा।

मैंने जो किया है, वह मेरे एमएसआई के लॉग को वाईएक्स एडिट के साथ जोड़ रहा है, और मैंने पाया है कि एक्शन इंस्टॉलफाइल एक से अधिक बार मौजूद है। और प्रभावी रूप से फ़ाइलों को दूसरी बार दिखाई देने पर लिखा जाता है।

<Custom Action="RegisterShellExt" Before="InstallFinalize"> 

यहाँ अनुक्रम मैं अपने एमएसआई के लॉग से निकाला गया है:: तो मैं निम्नलिखित करने के लिए अपने कस्टम क्रिया बदल

Action start 15:16:49: INSTALL. 
Action start 15:16:49: PrepareDlg. 
Action start 15:16:49: AppSearch. 
Action start 15:16:49: LaunchConditions. 
Action start 15:16:49: ValidateProductID. 
Action start 15:16:49: DIRCA_NEWRETARGETABLEPROPERTY1.5D429292039C46FCA3253E37B4DA262A. 
Action start 15:16:50: CostInitialize. 
Action start 15:16:50: FileCost. 
Action start 15:16:50: CostFinalize. 
Action start 15:16:50: WelcomeDlg. 
Action 15:16:51: LicenseAgreementDlg. Dialog created 
Action 15:16:53: CustomizeDlg. Dialog created 
Action 15:16:55: VerifyReadyDlg. Dialog created 
Action start 15:16:56: ProgressDlg. 
Action start 15:16:56: ExecuteAction. 
Action start 15:16:58: INSTALL. 
Action start 15:16:58: AppSearch. 
Action start 15:16:58: LaunchConditions. 
Action start 15:16:58: ValidateProductID. 
Action start 15:16:58: CostInitialize. 
Action start 15:16:59: FileCost. 
Action start 15:16:59: CostFinalize. 
Action start 15:16:59: InstallValidate. 
Action start 15:17:00: InstallInitialize. 
Action start 15:17:08: ProcessComponents. 
Action 15:17:09: GenerateScript. Generating script operations for action: 
Action ended 15:17:09: ProcessComponents. Return value 1. 
Action start 15:17:09: UnpublishFeatures. 
Action start 15:17:09: RemoveShortcuts. 
Action start 15:17:09: RemoveFiles. 
Action start 15:17:09: InstallFiles. 
Action start 15:17:10: CreateShortcuts. 
Action start 15:17:10: RegisterUser. 
Action start 15:17:10: RegisterProduct. 
Action start 15:17:10: PublishFeatures. 
Action start 15:17:10: PublishProduct. 
Action start 15:17:10: ConfigureInstaller. 
Action start 15:17:10: InstallFinalize. 
Action 15:17:10: ProcessComponents. Updating component registration 
Action 15:17:12: InstallFiles. Copying new files 
Action 15:17:21: CreateShortcuts. Creating shortcuts 
Action 15:17:21: RegisterProduct. Registering product 
Action 15:17:23: ConfigureInstaller. [[note: CustomAction]] 
Action 15:17:22: PublishFeatures. Publishing Product Features 
Begin CustomAction 'ConfigureInstaller' 
Action 15:17:28: RollbackCleanup. Removing backup files 
Action ended 15:17:28: InstallFinalize. Return value 1. 
Action start 15:17:28: RegisterShellExt. [[note: CustomAction]] 
Action ended 15:17:33: INSTALL. Return value 1. 
Action start 15:17:35: ExitDialog. 

किसी को भी एक आधिकारिक सूची पता है?

उत्तर

13

संक्षिप्त उत्तर - आपको कस्टमफाइल स्थगित कर दिया जाना चाहिए और इंस्टॉलफाइल के बाद शेड्यूल करना चाहिए (यदि यह इंस्टॉल की गई फ़ाइल पर निर्भर करता है, जो मुझे लगता है)।

लंबा उत्तर - आपको इन-स्क्रिप्ट निष्पादन अवधि से परिचित होना चाहिए। Read more about it on MSDN। जब आप लॉग फ़ाइल में पहली बार InstallFiles देखते हैं, तो यह तब होता है जब तत्काल क्रियाएं चलती हैं और स्थगित क्रियाएं लिखी जाती हैं और स्थापना स्क्रिप्ट के लिए निर्धारित होती हैं। दूसरी बार यह वास्तव में निष्पादित करता है (और फ़ाइलों को स्थापित करता है)। यदि आप अपना कार्य स्थगित कर देते हैं, तो आप लॉग फ़ाइल में इसके लिए एक ही व्यवहार देखेंगे।

यह बहुत स्पष्ट नहीं हो सकता है, लेकिन यह तब तक नहीं हो सकता जब तक कि आप काम करने के लिए डिज़ाइन नहीं किए जाते हैं।

+0

धन्यवाद! इस पल के लिए मैं संक्षिप्त जवाब के साथ रहूंगा :) वास्तव में, जवाब मेरे लिए काफी स्पष्ट है। सबसे पहले वे कार्य तैयार करते हैं, हालांकि यदि आप इसे तत्काल बनाते हैं तो वास्तविक कार्य शुरू होने तक यह इंतजार नहीं करेगा। –

+1

लेकिन क्या कार्रवाइयों के अनुक्रम की एक ऑफिकल सूची है? अन्यथा हमें सिर्फ परीक्षण और त्रुटि है जो हास्यास्पद लगता है ?! इनपुट के लिए – markmnl

5

डीएलएल पंजीकृत करने के लिए, स्व-पंजीकरण से बचने के लिए सबसे अच्छा है।

हम एक वाईएक्स खंड उत्पन्न करने के लिए HEAT कमांड का उपयोग करते हैं जो हमारे लिए पंजीकरण करता है।

उपयोग

heat file myfile.dll -o myfile.wxs 

इस का लाभ यह है कि रजिस्ट्री प्रविष्टियाँ स्थापित कर रहे हैं और सही ढंग से हटा दिया है और वहाँ क्या फ़ाइल स्थापित किया गया है या नहीं समय में पंजीकरण किया जाता है के साथ कोई समस्या नहीं हो रहा है।

+0

धन्यवाद। मुझे नहीं पता था कि डीएलएस पंजीकृत करने के लिए एक विशेष लिपि है। इस पल के लिए मैं कस्टम एक्शन रखूंगा, लेकिन जैसे ही मेरा इंस्टॉलर ठीक काम करता है, मैं देखता हूं कि गर्मी कमांड कैसे काम करता है। –

+0

मैं गर्मी उपयोगिता का उपयोग करने की कोशिश कर रहा था, लेकिन मैं HEAT5150 चेतावनी से पहले नहीं जा सकता। मुझे लगता है कि इस चेतावनी के परिणामस्वरूप, परिणामी Wxs फ़ाइल में कोई उपयोगी कोड नहीं है, केवल 'निर्देशिका' और 'घटक' खंड। यहां पूर्ण चेतावनी संदेश है: 'heat.exe: चेतावनी HEAT5150: एक फ़ाइल से डेटा फसल नहीं कर सका जो एक सेल्फरेग डीएलएल होने की उम्मीद थी: (...) अपवाद के लक्ष्य से अपवाद फेंक दिया गया है। –

+1

कुछ चीजें जिन्हें मैंने वाईएक्स मेलिंग सूची में पाया: 1) यह 64 बिट डीएलएल के साथ काम नहीं कर सकता है। 2) प्रशासक के रूप में गर्मी चलाने का प्रयास करें 3) इस पृष्ठ पर उल्लिखित RegSpy को चलाने का प्रयास करें http://www.installsite.org/pages/en/msi/tips.htm, जो कनवर्ट करने के लिए गर्मी के लिए .reg फ़ाइल बनायेगा। wxs। 4) सुनिश्चित करें कि कोई लापता निर्भरता – AntonyW