2012-03-27 39 views
5

Tôi đã tạo một VSTO Outlook Addin sử dụng thư viện Html2Xhtml.dll (.NET) gọi một Html2xhtml.exe khác bằng cách thi hành System.Diagnostic.Process.Start().Tìm thư mục Cài đặt và thư mục làm việc của VSTO Outlook Addin; hoặc bất kỳ Office Addin

Tuy nhiên, nó không gọi Html2xhtml.exe (tôi nghĩ) vì thư mục làm việc ngay cả khi được khởi chạy từ Visual Studio là thư mục My Documents hiện tại của người dùng. Tôi không có quyền kiểm soát mã trong Html2Xhtml.dll vì vậy tôi không thể sử dụng đường dẫn tuyệt đối; nhưng tôi cho rằng tôi có thể thay đổi thư mục làm việc của Add-in khi chạy.

Tuy nhiên, nếu tôi cài đặt thông qua ClickOnce hoặc một số phương tiện khác mà tôi không biết đường dẫn cài đặt mà người dùng sẽ chọn, làm cách nào để tôi tìm Html2xhtml.exe của mình?

Trả lời

16

Tôi tìm thấy câu trả lời here, toàn bộ tín dụng cho 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

Đó là vấn đề thực sự mà tôi phải chiến đấu trong một thời gian. Giải pháp được sử dụng trong AddIn mà tôi phải làm việc là viết thư mục cài đặt vào sổ đăng ký và đọc giá trị từ đó. Bằng cách đó mọi thứ mang theo mà không thể được nhúng vào exe có thể được tìm thấy. Đây không phải là một giải pháp tốt nhưng nó hoạt động.

Tại sao MS dính vào "cơ chế bảo mật" ngu ngốc này sao chép tệp DLL vào một thư mục ngẫu nhiên là một bí mật mà họ có thể sẽ không bao giờ tiết lộ.

Trong khi viết nhận xét của mình, tôi thực sự đã có ý tưởng mà tôi chưa thử: Làm cho trình cài đặt của bạn sao chép các tệp bạn cần sau này vào% appdir% \ YourCompany \ YourApplication \ libs hoặc một số loại như vậy. Bạn sẽ có thể tìm thấy nội dung của bạn sau đó trong thời gian chạy.

+0

đây có thể là phương sách cuối cùng ... xem có ai đến cùng với ý tưởng hay hơn không. – Jake

+0

Vâng, tôi đã thử tất cả các loại công cụ phản chiếu. Thực tế là, lắp ráp được sao chép vào một vị trí ngẫu nhiên và do đó không thể tìm thấy bất kỳ tập tin nó mang theo. Nếu bạn không muốn ghi vào sổ đăng ký, bạn có thể ... tìm kiếm? Nhưng điều đó có thể khiến bạn phải tìm kiếm tất cả các ổ đĩa. –

3

Tôi đã có một vấn đề tương tự và giải quyết nó theo cùng một cách như mô tả của Christoph, tôi cũng muốn biết liệu có cách nào khác để làm điều này nhưng nếu bạn không tìm thấy bất cứ điều gì ở đây là một ví dụ

1) tạo một thư viện hành động tùy chỉnh với InstallerClass sau

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) Trong dự án thiết lập tạo ra một chìa khóa vào cài đặt tùy chỉnh hành động mà chỉ vào thư mục cài đặt: Install custom action

Nếu bạn cần thêm thông tin hoặc muốn tải xuống nguồn, hãy xem bài đăng this msdn bằng Open Xml MVP Wouter Văn Wugt có tiêu đề "Triển khai công cụ Visual Studio 2010 cho giải pháp văn phòng bằng Windows Installer"

+0

Cảm ơn deni, điều này rất hữu ích cho tôi. =) – Jake

+0

Đây có thể là ngày, nhưng đó là thông tin tốt. Vui lòng xem câu trả lời mới nhất của tôi bên dưới tôi đã tìm thấy. – Jake

0

Đã xảy ra sự cố tương tự cho các ứng dụng ClickOnce. Dưới đây là những gì bạn cần phải làm để có được con đường triển khai các addin:

Thêm System.Deployment.Application tham chiếu trong ứng dụng của bạn

tiếp theo là sử dụng tài sản này để lấy đường triển khai:

ApplicationDeployment.CurrentDeployment.UpdateLocation.ToString() 

và thông tin cho bạn!

Các vấn đề liên quan