大家好!。我写了一个.dll,里面用Path.GetFullPath("filename.xml")调用运行目录下的文件,在控制台测试没有任何问题。但是,在windowservice中使用这个DLL时,Path.GetFullPath("filename.xml")这个方法返回的是C:\WINDOWS\system32\filename.xml可能 我表达的不是很清楚,我举个例子:比如我的windowService程序放在:E:\WinService\Win 目录下面,这个目录下面有一个文件filename.xml;我用Path.GetFullPath("filename.xml")目的是想返回:E:\WinService\Win\filename.xml 这个绝对路径;可我这里出现的问题是没有得到路径"E:\WinService\Win\filename.xml"而是返回了:C:\WINDOWS\system32\filename.xml但是,如果我不在windowService服务的话,用Path.GetFullPath("filename.xml")就可以得到E:\WinService\Win\filename.xml 这个绝对路径。
请高手指点

解决方案 »

  1.   

    同时,还有一个一样的问题我用反射:Assembly assembly = Assembly.LoadFrom("abc.dll")时,本来我的用意时想调用运行目录下的E:\WinService\Win\abc.dll文件可在windowservice服务运行时,它又指身C:\WINDOWS\system32\abc.dll 
    但,如果不用服务就不会出现路径获取错误!
      

  2.   


    Envirement.getcurrentdi...
    应该可以。。这是系统用户的原因。。
      

  3.   

    能说清楚 一点吗?因为如果我用Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName)
    方式的话,是可以得到我要的结果,但我想明白是怎么一回事!而且,如果是系统用户的原因,我是在同一台电脑上呀。。同一个用户...谢谢!
      

  4.   

    搂主这样获取程序运行的相对路径比较好:
    string szDllPath = Path.GetDirectoryName(typeof(你的DLL主类的名称,比如MyClass).Assembly.Location)string szFilePath = szDllPath + "\\filename.xml";
      

  5.   

    搂主这样获取程序运行的相对路径比较好:
    string szDllPath = Path.GetDirectoryName(typeof(你的DLL主类的名称,比如MyClass).Assembly.Location)string szFilePath = szDllPath + "\\filename.xml";
      

  6.   

    哦,这是因为Path.GetFullPath得到的是当前可执行程序的路径,而搂主的程序是一个dll
    dll必须挂接到一个exe等程序里面运行然后搂主的这个dll的宿主进程是windows系统目录里的一个windows服务执行程序,所以得到的目录是
    系统目录我有可能不能描述清楚,不过就是这个意思,搂主可以参考
      

  7.   

    谢谢楼上的各位!但我想弄明白到底是怎么一会事!才能更好的解决。因为我这个是刚接过同事的项目,我也不知道他到底在多少 个地方用到过,Path.GetFullPath("filename.xml")这个方法
      

  8.   

    你的宿主是WINDOWS服务,这样得到的只是宿主的路径,应该用AppDomain.CurrentDomain.BaseDirectory才对.