澳门新葡萄京官网注册创建 Windows 服务时路径问题

用 Visual Studio 能够创建 Windows
服务程序,那样能够直接加载到系统的劳务中,管理很有利。

C# 获取当前路径方法

使用 C#,假如服务程序要读取三个 xml 文件:

 

  • 假若只内定 xml 文件名,则程序是到 system32 那么些目录下来找该文件。
  • 若是钦点 Environment.CurrentDirectory + xml 文件名,程序也是到
    system32 这几个目录下来找该公文。
  • 如果钦命 System.AppDomain.CurrentDomain.BaseDirectory + xml
    文件名,则在程序的基目录中去找。

//获取包罗项目清单的已加载文件的门道或 UNC 地点。

自己做了二个服务,独有二个 exe 文件和二个 xml
文件,放在同一个目录下,且不在 system32 目录下,所以笔者用
System.AppDomain.CurrentDomain.BaseDirectory + xml 文件名。

        public static string sApplicationPath =
Assembly.GetExecutingAssembly ( ).Location;

        //result: X:xxxxxxxxx.dll (.dll文件所在的目录+.dll文件名卡塔尔(قطر‎

 

        //获取当前进程的完全路线,富含文件名(进程名State of Qatar。

        string str = this.GetType ( ).Assembly.Location;

        //result: X:xxxxxxxxx.exe (.exe文件所在的目录+.exe文件名State of Qatar

 

        //获取新的 Process
组件并将其与眼下活动的长河关联的主模块的完好路线,包蕴文件名(进度名卡塔尔。

        string str = System.Diagnostics.Process.GetCurrentProcess (
).MainModule.FileName;

        //result: X:xxxxxxxxx.exe (.exe文件所在的目录+.exe文件名卡塔尔(قطر‎

 

        //获取和安装当前目录(即该进度从当中运转的目录)的通通约束路线。

        string str = System.Environment.CurrentDirectory;

        //result: X:xxxxxx (.exe文件所在的目录State of Qatar

 

        //获取当前 Thread
的脚下应用程序域的基目录,它由程序集冲突消除程序用来探测程序集。

        string str = System.AppDomain.CurrentDomain.BaseDirectory;

        //result: X:xxxxxx (.exe文件所在的目录+””)

 

        //获取和设置饱含该应用程序的目录的名称。

        string str =
System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;

        //result: X:xxxxxx (.exe文件所在的目录+””)

 

        //获取运维了应用程序的可执行文件的门道,不蕴涵可施行文件的名目。

        string str = System.Windows.Forms.Application.StartupPath;

        //result: X:xxxxxx (.exe文件所在的目录卡塔尔

 

        //获取运营了应用程序的可试行文件的不二秘籍,包涵可实践文件的名号。

        string str = System.Windows.Forms.Application.ExecutablePath;

        //result: X:xxxxxxxxx.exe (.exe文件所在的目录+.exe文件名卡塔尔

 

        //获取应用程序的当前专业目录(不可相信赖卡塔尔(قطر‎。

        string str = System.IO.Directory.GetCurrentDirectory ( );

        //result: X:xxxxxx (.exe文件所在的目录State of Qatar

 

在系统服务中最佳用这么些主意去取路线

                string stmp = Assembly.GetExecutingAssembly (
).Location;

                stmp = stmp.Substring ( 0 , stmp.LastIndexOf ( ‘\’ )卡塔尔国;//删除文件名

                if ( pathType == 1 )

                    return stmp + @”inputLog.xml”;

                else if ( pathType == 2 )

                    return stmp + @”MiddleDB.xml”;

                else

                    return stmp + @”AppNo.xml”;

 

using System.IO;

        string path = “d:asdfasdf.bmp”;

        string fileName = Path.GetFileName(path); //文件名

        string ext = Path.GetExtension(path); //扩展名

 

1、决断多少个加以的门路是不是可行,合法
因而Path.GetInvalid帕特hChars或Path.GetInvalidFileNameChars方法得到非法的路子/文件名字符,可以依附它来推断路径中是或不是含有不合规字符;

2、怎么样鲜明四个路径字符串是象征目录依然文件
  
使用Directory.Exists或File.Exist方法,借使前面一个为真,则路径表示目录;如若后面一个为真,则路线表示文件
下面的不二秘籍有个破绽就是不能够管理那么些官样文章的公文或目录。当时能够虚构接收Path.GetFileName方法获得其蕴藉的文本名,假使一个门路不为空,而文件名称为空那么它象征目录,不然表示文件;
3、拿到路线的某部特定部分
   Path.GetDirectoryName :再次来到钦定路径字符串的目录音信。
   Path.GetExtension :再次来到钦定的门径字符串的增添名。
   Path.GetFileName :再次回到钦命路径字符串的文件名和强盛名。
   Path.GetFileNameWithoutExtension
:再次来到不有所扩展名的门路字符串的公文名。
   Path.GetPathRoot :获取钦赐路径的根目录音讯。
4、正确地会集三个路子而不用去忧郁这些烦人的“”字符
   使用Path.Combine方法,它会帮您管理烦人的“”。
5、拿到系统目录的路径
   Environment.SystemDirectory属性:获取系统目录的一点一滴节制路线
  
Environment.GetFolder帕特h方法:该方法采取的参数类型为Environment.SpecialFolder枚举,通过这一个办法能够博得多量体系   
文件夹的门道,如作者的微处理机,桌面,系统目录等
   Path.GetTempPath方法:重临当前系统的一时文件夹的路径
6、判别二个门道是相对路线依旧相对路线
   使用Path.IsPathRooted方法
7、读取或安装当前目录
   使用Directory类的GetCurrentDirectory和SetCurrentDirectory方法
8、使用相对路径
  
设置当前目录后(见上个难题),就可以使用绝对路线了。对于二个相对路线,大家可以利用Path.GetFullPath方法赢得它的完   
全范围路线(相对路线)。
   
注意:要是计划利用相对路线,建议您将工作目录设置为种种相互文件的一同源点,不然大概会引进一些不错觉察的安全隐患,被恶心顾客选择来访谈系统文件。

9、文件夹浏览会话框(FolderBrowserDialog类)
入眼质量:
Description:树视图控件上显得的求证文本,如上航海用体育场地中的“接纳目录–演习”;RootFolder:获取或安装从其伊始浏览的根文件夹,如上海体育地方中安装的本人的微机(默以为桌面);SelectedPath:获取或安装客户选定的路径,要是设置了该属性,打开对话框时会牢固到内定路径,默感觉根文件夹,关闭对话框时依附该属性获取顾客客户选定的门路;        
ShowNewFolderButton:获取或安装是不是出示新建对话框按键;
第后生可畏措施:

ShowDialog:张开该对话框,重临值为DialogResult类型值,如若为DialogResult.OK,则能够由SelectedPath属性获取客户选定的路径;

1.
System.Diagnostics.Process.GetCurrentProcess(卡塔尔(قطر‎.MainModule.FileName-获取模块的全体路线。

2.System.Environment.CurrentDirectory-获取和安装当前目录(该进度从当中运维的目录卡塔尔的一心节制目录。

3.System.IO.Directory.GetCurrentDirectory(卡塔尔-获取应用程序的当前专门的学问目录。这几个不必然是前后相继从当中运行的目录,有望程序放在C:xxx里,那些函数有望重回C:Documents
and SettingsZYB,或者C:Program FilesAdobe,不经常不必然重临什么。

4.System.AppDomain.CurrentDomain.BaseDirectory-获取程序的基目录。

5.System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase-获取和安装囊括该应用程序的目录的名目。

6.
System.Windows.Forms.Application.StartupPath-获取运转了应用程序的可试行文件的不二等秘书籍。效果和2、5如出风流罗曼蒂克辙。只是5赶回的字符串后边多了三个””而已

7.System.Windows.Forms.Application.ExecutablePath-获取运转了应用程序的可施行文件的门道及文件名,效果和1同生机勃勃。对于Windows程序
和Web
应用程序来讲,他们运转的门径是不生机勃勃致的,所以最首假诺判别当前运作的次序是哪一种程序.于是大家得以接收如下的代码

string path = “”;

if (System.Environment.CurrentDirectory
==AppDomain.CurrentDomain.BaseDirectory卡塔尔国//Windows应用程序则约等于

…{path = AppDomain.CurrentDomain.BaseDirectory;

}else…{path = AppDomain.CurrentDomain.BaseDirectory + “Bin”;

}那样朝气蓬勃旦大家写了三个类库,类库中用到了Assembly.LoadFrom,由于是通用类库,所以或然用到Windows程序中也恐怕用到Web中,那么用位置的代码就很有利了.

  1、Server.MapPath

  2、System.Windows.Forms.StartupPath

  3、Type.Assembly.Location方法2能够应用于调节台应用程序,WinForm应用程序,Windows服务,方法1方可选拔于Web应用程序,方法3都足以运用。但方法3是加载应用程序的路径。借使是Web应用程序,得到的不二诀假诺:C:WINDOWSMicrosoft.NETFrameworkv1.1.4322Temporary
ASP.NET
Files目录。所以Web项目也许利用Server.Map帕特h吧。不然建议选取办法2。即使本身新建类库。能够参预对System.Windows.Forms.StartupPath的援引后选取。

 

转自:

发表评论

电子邮件地址不会被公开。 必填项已用*标注