2009-07-14 182 views
6

我在C#中編寫了一個windows服務,它產生了我正在編寫的另一個應用程序的多個實例。應用程序有可能安裝在機器上的任何位置。讓服務知道應用程序位於何處的最佳方式是什麼?什麼是確定應用程序位置的正確方法?

回答

6

如果你的意思是服務啓動不同應用程序,然後,選項:

  • 使用配置文件配置服務;把路徑有
  • 安裝過程中把東西在註冊表
  • 使用一個類似於COM/COM +註冊
  • 考慮的GAC如果其他應用程序是.NET(雖然我不是一個球迷。 ..)
  • 環境變量?

就我個人而言,我喜歡配置文件選項;它是簡單和易於維護,並允許多個獨立的(並排側)的服務和應用程序安裝

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

string appPath = Path.GetDirectoryName(Application.ExecutablePath) 

那是一個應用程序(以上)。

一個asp.net項目:

using System.Web; 

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

這不適用於沒有表單的服務 – Treb 2009-07-14 21:16:58

+0

服務可以引用Windows窗體而沒有問題。上面的行實際上並沒有使用任何形式,應該沒問題。但是有更簡單的方法來獲取代碼庫! – 2009-07-14 21:18:21

8

如果您需要找到您的服務已安裝到你可以使用下面的代碼

this.GetType().Assembly.Location 
的文件夾

如果你需要找到一些其他的應用程序安裝到您的文件夾應該到Windows Installer

[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

在安裝期間編寫註冊表變量,通過這種方式,在提供升級時,您可以讀取先前寫入的值並將其默認值讀回到用戶先前選擇的文件夾。

相關問題