2009-07-14 27 views

Trả lời

6

Nếu bạn có nghĩa là dịch vụ bắt đầu một khác nhau ứng dụng, sau đó; tùy chọn:

  • định cấu hình dịch vụ bằng tệp cấu hình; đặt đường dẫn trong đó
  • đặt một cái gì đó trong registry trong khi cài đặt
  • sử dụng một cái gì đó giống như COM/COM + đăng ký
  • xem xét GAC nếu ứng dụng khác là NET (mặc dù tôi không phải là một fan hâm mộ. ..)
  • biến môi trường?

Cá nhân, tôi thích tùy chọn tệp cấu hình; nó là đơn giản và dễ dàng để duy trì, và cho phép nhiều riêng biệt (side-by-side) dịch vụ và ứng dụng cài đặt

+0

Tôi muốn biết nhiều hơn về cách sử dụng gấc trong trường hợp này, mặc dù tôi nhận thức được những mối nguy hiểm như thế nào sẽ làm việc này? những gì về tập tin cấu hình, nó sẽ được nhúng? nếu nó không được nhúng ở đâu thì cấu hình cho một dịch vụ tồn tại? – Firoso

+0

Tôi có thể sẽ kết thúc với phương pháp tập tin cấu hình, nhưng tôi cũng muốn biết thêm về cách sử dụng GAC theo cách này là tốt. – MGSoto

1
using System.IO; 
using System.Windows.Forms; 

string appPath = Path.GetDirectoryName(Application.ExecutablePath) 

Thats cho một ứng dụng (ở trên).

cho một dự án asp.net:

using System.Web; 

HttpContext.Current.Server.MapPath("place arguments here"); 
+0

Điều này sẽ không hoạt động trong dịch vụ không có biểu mẫu – Treb

+0

Dịch vụ có thể tham chiếu các biểu mẫu cửa sổ mà không gặp sự cố. Các dòng trên không thực sự sử dụng bất kỳ hình thức, và nên được OK. Nhưng có những cách dễ dàng hơn để có được codebase! –

+0

Xin lỗi, hiểu nhầm câu hỏi - Tôi nghĩ anh ấy muốn có được vị trí của dịch vụ. – Treb

8

Nếu bạn cần phải xác định vị trí thư mục dịch vụ của bạn được cài đặt để bạn có thể sử dụng đoạn mã sau

this.GetType().Assembly.Location 

Nếu bạn cần xác định vị trí thư mục một số ứng dụng khác được cài đặt vào bạn nên thực hiện một yêu cầu đến cửa sổ cài đặt

[DllImport("MSI.DLL", CharSet = CharSet.Auto)] 
private static extern UInt32 MsiGetComponentPath(
    string szProduct, 
    string szComponent, 
    StringBuilder lpPathBuf, 
    ref int pcchBuf); 

private static string GetComponentPath(string product, string component) 
{ 
    int pathLength = 1024; 
    StringBuilder path = new StringBuilder(pathLength); 
    MsiGetComponentPath(product, component, path, ref pathLength); 
    return path.ToString(); 
} 
1

System.Environment.CurrentDirectory

1

Viết biến đăng ký trong khi cài đặt, theo cách này khi phân phối nâng cấp, bạn có thể đọc lại giá trị được viết trước đây và mặc định cho người dùng đã chọn thư mục trước đó.

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