Как правильно определить местоположение приложения? - PullRequest
6 голосов
/ 15 июля 2009

Я пишу службу Windows на C #, которая порождает несколько экземпляров другого приложения, которое я пишу. Существует вероятность того, что приложение может быть установлено в любом месте на компьютере. Каков наилучший способ сообщить службе, где находится приложение?

Ответы [ 5 ]

8 голосов
/ 15 июля 2009

Если вам нужно найти папку, в которую установлена ​​ваша служба, вы можете использовать следующий код

this.GetType().Assembly.Location

Если вам нужно найти папку, на которой установлено какое-либо другое приложение, вам следует обратиться к установщику Windows

[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();
}
6 голосов
/ 15 июля 2009

Если вы имеете в виду, что служба запускает другое приложение, то; опции:

  • настроить сервис с помощью файла конфигурации; положить путь туда
  • положить что-то в реестр во время установки
  • использовать что-то похожее на регистрации COM / COM +
  • рассмотрите GAC, если другое приложение .NET (хотя я не фанат ...)
  • переменная окружения?

Лично мне нравится опция файла конфигурации; он прост и удобен в обслуживании и позволяет устанавливать несколько отдельных (параллельных) сервисов и приложений

1 голос
/ 15 июля 2009

Записать переменную реестра во время установки. Таким образом, при доставке обновления вы можете считывать ранее записанное значение и использовать по умолчанию папку, ранее выбранную пользователями.

1 голос
/ 15 июля 2009

System.Environment.CurrentDirectory

1 голос
/ 15 июля 2009
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" );
...