#事故现场
使用.net core写了个服务,然后用在windows上使用SC命令创建服务,代码中有获取当前路径的语句,如下:
var path=Directory.GetCurrentDirectory();
path的值总是"C:\WINDOWS\system32
".
但是使用visual studio调试的时候,path的值是正常的;
#事故原因
1、创建服务的时候,是使用的管理员模式的CMD窗口创建的,如下:
C:\WINDOWS\system32>sc create testService binPath= "D:\test\test.exe"
2、Directory.GetCurrentDirectory()
System.IO命名空间中存在Directory类,提供了获取应用程序运行当前目录的静态方法GetCurrentDirectory
,但根据.net core的设计,此方法不是真正的获取应用程序的当前方法,而是执行dotnet
命令所在目录。
故sc.exe
就在C:\WINDOWS\system32
目录下,使用sc安装、启动服务,使得GetCurrentDirectory()
获取到的值为C:\WINDOWS\system32
。
#解决方案
只能找个变通的方法获取程序当前路径:
var path=Path.GetDirectoryName(Assembly.GetEntryAssembly().Location;