[英]C# Windows Service - Start .exe from App.config
我使用以下代码从Windows服务执行.exe文件。
System.Diagnostics.Process.Start(path);
现在,我将路径硬编码为@'C:\\ Program Files \\ Server \\ Test.exe'它工作正常。
现在,我想避免硬编码。 当我只使用Test.exe时,它会转到C:\\ Windows \\ System32。
如何从Windows服务动态获取安装路径? 或者我如何从App.config文件中读取路径?
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
如果您的.net一直向下(即您的Windows服务是.net应用程序),那么您可以使用Assembly.GetEntryAssembly
(来自System.Reflection命名空间):
var entryAssembly = Assembly.GetEntryAssembly();
var launchLocation = entryAssembly.Location;
或者,您可以检查您正在执行的AppDomain
(假设您没有做多个聪明的事情!)
var appDomain = AppDomain.CurrentDomain;
var launchLocation = appDomain.BaseDirectory;
一个简单的控制台应用
static void Main(string[] args)
{
var entryAssembly = Assembly.GetEntryAssembly();
var launchLocationFromAssembly = entryAssembly.Location;
var appDomain = AppDomain.CurrentDomain;
var launchLocationFromAppDomain = appDomain.BaseDirectory;
Console.WriteLine(launchLocationFromAssembly);
Console.WriteLine(launchLocationFromAppDomain);
}
给出以下输出:
c:\\ users \\ robertwray \\ documents \\ visual studio 2015 \\ Projects \\ ConsoleApplication4 \\ ConsoleApplication4 \\ bin \\ Debug \\ ConsoleApplication4.exe
c:\\ users \\ robertwray \\ documents \\ visual studio 2015 \\ Projects \\ ConsoleApplication4 \\ ConsoleApplication4 \\ bin \\ Debug \\
这意味着如果您确实使用Assembly
来检索路径,则需要使用以下内容删除可执行文件的名称:
var launchPathFromAssembly = Path.GetDirectoryName(launchLocationFromAssembly);
您可以使用
AppDomain.CurrentDomain.BaseDirectory
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.