2012-03-27 24 views
5

मैंने एक VSTO Outlook Addin बनाया है जो एक लाइब्रेरी Html2Xhtml.dll (.NET) का उपयोग करता है जो System.Diagnostic.Process.Start() को निष्पादित करके एक और Html2xhtml.exe को कॉल करता है।VSTO Outlook Addin की निर्देशिका और कार्य निर्देशिका स्थापित करें; या किसी भी Office Addin

हालांकि, यह Html2xhtml.exe (मुझे लगता है) को कॉल करने में विफल रहता है क्योंकि विजुअल स्टूडियो से लॉन्च होने पर भी कार्यशील निर्देशिका वर्तमान उपयोगकर्ता मेरा दस्तावेज़ फ़ोल्डर है। मेरे पास Html2Xhtml.dll में कोड पर कोई नियंत्रण नहीं है इसलिए मैं पूर्ण पथ का उपयोग नहीं कर सकता; लेकिन मुझे लगता है कि मैं रनटाइम पर ऐड-इन की कार्यशील निर्देशिका बदल सकता हूं।

हालांकि, अगर मैं इसे क्लिकऑन या कुछ अन्य माध्यमों के माध्यम से स्थापित करता हूं, जहां मुझे इंस्टॉल पथ नहीं पता है, तो उपयोगकर्ता मेरा एचटीएमएल 2xhtml.exe कैसे ढूंढ सकता है?

उत्तर

16

"एक दृश्य स्टूडियो 2010 उपकरण कार्यालय समाधान के लिए Windows इंस्टालर का उपयोग नियोजित करना" मैं इस सवाल का जवाब मिल गया here, robindotnet.wordpress.com पर पूर्ण क्रेडिट।

//Get the assembly information 
System.Reflection.Assembly assemblyInfo = System.Reflection.Assembly.GetExecutingAssembly(); 

//Location is where the assembly is run from 
string assemblyLocation = assemblyInfo.Location; 

//CodeBase is the location of the ClickOnce deployment files 
Uri uriCodeBase = new Uri(assemblyInfo.CodeBase); 
string ClickOnceLocation = Path.GetDirectoryName(uriCodeBase.LocalPath.ToString()); 
1

यह एक वास्तविक समस्या है जिसे मुझे काफी समय से लड़ना पड़ा। एक एडइन I में उपयोग किए गए समाधान को रजिस्ट्री में स्थापित डीआईआर लिखना था और वहां से मूल्य पढ़ना था। इस तरह चीजें लाईं जो exe में एम्बेडेड नहीं किया जा सका पाया जा सकता है। यह एक अच्छा समाधान नहीं है लेकिन यह काम करता है।

क्यों एमएसएल एक यादृच्छिक निर्देशिका में डीएलएल की प्रतिलिपि बनाने के इस बेवकूफ "सुरक्षा तंत्र" पर चिपक जाता है वह एक रहस्य है जिसे वे कभी प्रकट नहीं करेंगे।

मेरी टिप्पणी लिखते समय मुझे वास्तव में एक ऐसा विचार था जिसे मैंने अभी तक नहीं देखा था: अपने इंस्टॉलर को बाद में% appdir% \ YourCompany \ YourApplication \ libs या कुछ ऐसे फ़ाइलों को कॉपी करें जिन्हें आप चाहते हैं। रनटाइम के दौरान आपको अपनी सामग्री ढूंढने में सक्षम होना चाहिए।

+0

यह अंतिम उपाय हो सकता है ... देखें कि कोई भी बेहतर विचार के साथ आता है या नहीं। – Jake

+0

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

3

मुझे इसी तरह की समस्या है और इसे क्रिस्टोफ द्वारा वर्णित वैसे ही हल किया गया है, मैं यह भी जानना चाहूंगा कि ऐसा करने के कोई वैकल्पिक तरीके हैं, लेकिन यदि आपको कुछ भी नहीं मिला है तो उदाहरण है

1) निम्नलिखित InstallerClass

using System; 
using System.Collections; 
using System.ComponentModel; 
using System.Configuration.Install; 
using System.IO; 
using System.Linq; 
using System.Xml.Linq; 
using Microsoft.VisualStudio.Tools.Applications; 
using Microsoft.Win32; 

namespace Setup.CustomActions 
{ 
    [RunInstaller(true)] 
    public partial class AddCustomization : Installer 
    { 
     static readonly Guid solutionID = new Guid("d6680661-c31e-4c24-9492-5919dc0uagt5"); 
     public override void Install(IDictionary stateSaver) 
     { 
      string installPath = Context.Parameters["installPath"]; 
      if(!String.IsNullOrEmpty(installPath)) 
      { 
       AddTemplateToAvailableTemplates(installPath); 
      }   
      base.Install(stateSaver); 
     } 

     public override void Rollback(IDictionary savedState) 
     { 
     } 

     public override void Uninstall(IDictionary savedState) 
     { 
     } 

     private void AddTemplateToAvailableTemplates(string installPath) 
     { 
      //The example below is very basic, put in checks to see whether the registry key already exists and so on 
      RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Office\14.0\Common", true); 
      RegistryKey acturisKey = key.CreateSubKey(@"Spotlight\MyAppInstallPath"); 
      acturisKey.SetValue("InstallPath", installPath);h); 
     } 
    } 
} 

2) सेटअप परियोजना में कस्टम स्थापित कार्रवाई जो स्थापित निर्देशिका के लिए अंक पर एक कुंजी बनाने के साथ एक कस्टम कार्यों पुस्तकालय बनाएँ: Install custom action

आप अधिक जानकारी की जरूरत है या स्रोत डाउनलोड करने के लिए चाहते हैं खुला Xml एमवीपी Wouter वैन Wugt द्वारा this MSDN पोस्ट शीर्षक पर एक नजर है, तो

+0

धन्यवाद डेन्नी, यह मेरे लिए सहायक है। =) – Jake

+0

यह दिनांकित किया जा सकता है, लेकिन यह अच्छा सूचना है। कृपया मुझे नीचे दिया गया मेरा नवीनतम उत्तर देखें। – Jake

0

क्लिकऑन अनुप्रयोगों के लिए एक ही समस्या थी। यहाँ आप ऐड की तैनाती पथ प्राप्त करने के लिए क्या करने की जरूरत है:

अपने आवेदन में System.Deployment.Application संदर्भ जोड़ें

अगले तैनाती पथ को पुनः प्राप्त करने के लिए इस संपत्ति का उपयोग करने के लिए है:

ApplicationDeployment.CurrentDeployment.UpdateLocation.ToString() 

और वहां आप जाते हैं!