2010-10-13 12 views
11

मैं एप्लिकेशन को तैनात कर रहा हूं और उपयोगकर्ता के चयन के दौरान इंस्टॉलेशन के दौरान इंस्टॉलेशन के दौरान मैं उस पथ को प्राप्त करना चाहता हूं, मैं पहले से ही एक कस्टम एक्शन में हूं, लेकिन मुझे नहीं पता कि एप्लिकेशन पथ कैसे प्राप्त करें इसे स्थापित करने जा रहा है!स्थापना के दौरान अनुप्रयोग पथ प्राप्त करना

इसके विंडोज फॉर्म और मैं विजुअल स्टूडियो 2010 "सी #" का उपयोग कर विकास कर रहा हूं।

और im डिफ़ॉल्ट की तैनाती उपकरण का उपयोग कर ...

किसी भी विचार? पहले से

धन्यवाद ...

+0

"कस्टम एक्शन" के आधार पर मुझे लगता है कि आप विंडोज इंस्टालर का उपयोग कर रहे हैं। क्या आप विक्स या विजुअल स्टूडियो सेटअप प्रोजेक्ट का उपयोग कर रहे हैं? –

+0

ओह क्षमा करें मैं अधिक जानकारी प्रदान करना भूल गया हूं, मैं अपना प्रश्न संपादित करूंगा ... – Stacker

उत्तर

32

वर्ग अपने कस्टम कार्रवाई में है System.Configuration.Installer.Installer से विरासत चाहिए। इसमें कॉन्टेक्स्ट नामक पैरामीटर है जिसमें पैरामीटर शब्दकोश है। शब्दकोश में इंस्टॉल के बारे में कई उपयोगी चर शामिल हैं और आप कुछ जोड़ सकते हैं।

कस्टम क्रिया फलक में अपने इंस्टॉल प्रोजेक्ट में कस्टम इंस्टॉलर जोड़ने के बाद। स्थापित करें कार्रवाई का चयन करें और करने के लिए CustomActionData गुण सेट करें:

/targetdir="[TARGETDIR]\" 

तो फिर तुम इस तरह पथ में पहुंच सकते हैं:

[RunInstaller(true)] 
public partial class CustomInstaller : System.Configuration.Install.Installer 
{ 
    public override void Install(System.Collections.IDictionary stateSaver) 
    { 
     base.Install(stateSaver); 
     string path = this.Context.Parameters["targetdir"]; 
     // Do something with path. 
    } 
} 
+1

यह काम नहीं करता है :( – Stacker

+0

मेरा बुरा। आपको कस्टमएक्शनडेटा संपत्ति सेट करने की भी आवश्यकता है। अद्यतन पोस्ट किया गया। –

+0

विज़ुअल सी ++ में TARGETDIR का उपयोग कैसे करें? – karikari

1

मैं जानता हूँ कि यह वीबी है, लेकिन यह मेरे लिए काम किया।

Private Sub DBInstaller_AfterInstall(ByVal sender As Object, ByVal e As System.Configuration.Install.InstallEventArgs) Handles Me.AfterInstall 

    MessageBox.Show(Context.Parameters("assemblypath")) 

End Sub 
+0

लगता है कि यह सवाल का जवाब नहीं देता है। –

0

पुरानी पोस्ट के लिए उत्तर पोस्ट करने के लिए खेद है, लेकिन मेरा जवाब अन्य की मदद कर सकता है।

public override void Install(System.Collections.IDictionary stateSaver) 
{ 
    base.Install(stateSaver); 
    rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); 
    if (rkApp.GetValue("MyApp") == null) 
    { 
     rkApp.SetValue("MyApp", this.Context.Parameters["assemblypath"]); 
    } 
    else 
    { 
     if (rkApp.GetValue("MyApp").ToString() != this.Context.Parameters["assemblypath"]) 
     { 
      rkApp.SetValue("MyApp", this.Context.Parameters["assemblypath"]); 
     } 
    } 
} 

public override void Uninstall(System.Collections.IDictionary savedState) 
{ 
    base.Uninstall(savedState); 
    rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); 

    if (rkApp.GetValue("MyApp") != null) 
    { 
     rkApp.DeleteValue("MyApp", false); 
    } 
} 
संबंधित मुद्दे