![[论文] C#中获取程序的当前路径的方法.doc_第1页](http://file.renrendoc.com/FileRoot1/2019-2/23/9f39a2e1-311e-4135-b7ab-aecaf6990d9e/9f39a2e1-311e-4135-b7ab-aecaf6990d9e1.gif)
![[论文] C#中获取程序的当前路径的方法.doc_第2页](http://file.renrendoc.com/FileRoot1/2019-2/23/9f39a2e1-311e-4135-b7ab-aecaf6990d9e/9f39a2e1-311e-4135-b7ab-aecaf6990d9e2.gif)
![[论文] C#中获取程序的当前路径的方法.doc_第3页](http://file.renrendoc.com/FileRoot1/2019-2/23/9f39a2e1-311e-4135-b7ab-aecaf6990d9e/9f39a2e1-311e-4135-b7ab-aecaf6990d9e3.gif)
![[论文] C#中获取程序的当前路径的方法.doc_第4页](http://file.renrendoc.com/FileRoot1/2019-2/23/9f39a2e1-311e-4135-b7ab-aecaf6990d9e/9f39a2e1-311e-4135-b7ab-aecaf6990d9e4.gif)
![[论文] C#中获取程序的当前路径的方法.doc_第5页](http://file.renrendoc.com/FileRoot1/2019-2/23/9f39a2e1-311e-4135-b7ab-aecaf6990d9e/9f39a2e1-311e-4135-b7ab-aecaf6990d9e5.gif)
已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C#如何获得当前程序所在的目录12:12Application.StartupPath;Environment.SpecialFolder.ApplicationData Environment.SpecialFolder命名空间可以获取很多特定的路径目录。 Environment.SpecialFolder. ApplicationData CommonApplicationData CommonProgramFiles Cookies DesktopDirectory Favorites History InternetCache LocalApplicationData Personal ProgramFiles Programs Recent SendTo StartMenu Startup Templates System System.Web.HttpContext.Request.获取服务器绝对路径和虚拟目录路径System.AppDomain.CurrentDomain.BaseDirectory;获取应用程序的当前工作目录。 string path = System.IO.Directory.GetCurrentDirectory();Environment.CurrentDirectory 获取应用程序的当前工作目录。 System.IO.Directory.GetCurrentDirectory() AppDomain.CurrentDomain.BaseDirectory 这两个只能在WindowForm中使用; Application.StartupPath Application.ExecutablePath 获取和设置当前目录(即该进程从中启动的目录)的完全限定路径。 Environment.CurrentDirectory 获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。 Application.ExecutablePath 我在项目文件夹里放了一个mdb数据库,供程序使用,发布时我如何获得该路径?vb里是app.path,就是应用程序的路径,不知在c#里怎么写?答案一application.path()答案二localpath 具体记不清楚了答案三 c#的写法 (梓赫)string path = ; if (system.environment.currentdirectory = appdomain.currentdomain.basedirectory)/windows应用程序则相等 . path = appdomain.currentdomain.basedirectory; else . path = appdomain.currentdomain.basedirectory + bin; C#获取项目程序路径的方法 1. webform用“Request.PhysicalApplicationPath获取站点所在虚拟目录的物理路径,最后包含“”;2.c# winform用A:“Application.StartupPath”:获取当前应用程序所在目录的路径,最后不包含“”;B:“Application.ExecutablePath ”:获取当前应用程序文件的路径,包含文件的名称;C:“AppDomain.CurrentDomain.BaseDirectory”:获取当前应用程序所在目录的路径,最后包含“”;D:“System.Threading.Thread.GetDomain().BaseDirectory”:获取当前应用程序所在目录的路径,最后包含“”;E:“Environment.CurrentDirectory”:获取当前应用程序的路径,最后不包含“”;F:“System.IO.Directory.GetCurrentDirectory”:获取当前应用程序的路径,最后不包含“”;3.c# windows service用“AppDomain.CurrentDomain.BaseDirectory”或“System.Threading.Thread.GetDomain().BaseDirectory”;用“Environment.CurrentDirectory”和“System.IO.Directory.GetCurrentDirectory”将得到“ system32”目录的路径;如果要使用“Application.StartupPath”或“Application.ExecutablePath ”,需要手动添加对“System.Windows.Forms.dll ”的引用,并在程序开头用“using System.Windows.Forms”声明该引用; C#获取程序当前路径的方法 C#获取程序当前路径的方法/获取新的 Process 组件并将其与当前活动的进程关联的主模块的完整路径,包含文件名(进程名)。string str = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;result: X:xxxxxxxxx.exe (.exe文件所在的目录+.exe文件名) /获取和设置当前目录(即该进程从中启动的目录)的完全限定路径。string str = System.Environment.CurrentDirectory;result: X:xxxxxx (.exe文件所在的目录)/获取当前 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文件所在的目录)经常要在应用程序里读取与其在同一个路径下的配置文件或其它文件等,但在Windows平台与WinCE平台下,获取当前路径的方法却不一样,现把本人的经验写在下面,下面的“CurrentPath”属性可以获取应用程序的当前路径,经测试,在WinXP与WinCE下均正常运行。PS:可以写成静态方法,编译到动态库里,到处都可以用了。public class Configsprivate string m_CurrentPath;private string Platformgetreturn Environment.OSVersion.Platform.ToString();public string CurrentPathgetif(Platform.Equals(WinCE)m_CurrentPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);else if(Platform.Equals(Win32NT)m_CurrentPath = Directory.GetCurrentDirectory();return m_CurrentPath;public Configs()C#中获取程序当前路径的集中方法string str1 =Process.GetCurrentProcess().MainModule.FileName;/可获得当前执行的exe的文件名。 string str2=Environment.CurrentDirectory;/获取和设置当前目录(即该进程从中启动的目录)的完全限定路径。/备注 按照定义,如果该进程在本地或网络驱动器的根目录中启动,则此属性的值为驱动器名称后跟一个尾部反斜杠(如“C:”)。如果该进程在子目录中启动,则此属性的值为不带尾部反斜杠的驱动器和子目录路径(如“C:mySubDirectory”)。string str3=Directory.GetCurrentDirectory();/获取应用程序的当前工作目录。string str4=AppDomain.CurrentDomain.BaseDirectory;/获取基目录,它由程序集冲突解决程序用来探测程序集。string str5=Application.StartupPath;/获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。string str6=Application.ExecutablePath;/获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。string str7=AppDomain.CurrentDomain.SetupInformation.ApplicationBase;/获取或设置包含该应用程序的目录的名称。1. System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName 获取模块的完整路径。2. System.Environment.CurrentDirectory 获取和设置当前目录(该进程从中启动的目录)的完全限定目录。3. System.IO.Directory.GetCurrentDirectory() 获取应用程序的当前工作目录。这个不一定是程序从中启动的目录啊,有可能程序放在C:www里,这个函数有可能返回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一样。文章给出功能实现代码,其中SingleInstance类实现只允许一个实例运行,Program为测试主程序入口。在代码中标识说明文字。完整代码下载。 主要代码SingleInstance.cs文件, using System;using System.IO;using System.Diagnostics;using System.Threading;using System.Reflection;using System.Runtime.InteropServices;/*- 郑佐 2006-07-01 /zhzuo -*/namespace Zhengzuo.CSharpCode / / 只启动一个应用程序实例控制类 / public static class SingleInstance private const int WS_SHOWNORMAL = 1; DllImport(User32.dll) private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow); DllImport(User32.dll) private static extern bool SetForegroundWindow(IntPtr hWnd); /标志文件名称 private static string runFlagFullname = null; /声明同步基元 private static Mutex mutex = null; / / static Constructor / static SingleInstance() #region api实现 / / 获取应用程序进程实例,如果没有匹配进程,返回Null / / 返回当前Process实例 public static Process GetRunningInstance() Process currentProcess = Process.GetCurrentProcess();/获取当前进程 /获取当前运行程序完全限定名 string currentFileName = currentProcess.MainModule.FileName; /获取进程名为ProcessName的Process数组。 Process processes = Process.GetProcessesByName(currentProcess.ProcessName); /遍历有相同进程名称正在运行的进程 foreach (Process process in processes) if (process.MainModule.FileName = currentFileName) if (process.Id != currentProcess.Id)/根据进程ID排除当前进程 return process;/返回已运行的进程实例 return null; / / 获取应用程序句柄,设置应用程序前台运行,并返回bool值 / public static bool HandleRunningInstance(Process instance) /确保窗口没有被最小化或最大化 ShowWindowAsync(instance.MainWindowHandle, WS_SHOWNORMAL); /设置真实例程为foreground window return SetForegroundWindow(instance.MainWindowHandle); / / 获取窗口句柄,设置应用程序前台运行,并返回bool值,重载方法 / / public static bool HandleRunningInstance() Process p = GetRunningInstance(); if (p != null) HandleRunningInstance(p); return true; return false; #endregion #region Mutex实现 / / 创建应用程序进程Mutex / / 返回创建结果,true表示创建成功,false创建失败。 public static bool CreateMutex() return CreateMutex(Assembly.GetEntryAssembly().FullName); / / 创建应用程序进程Mutex / / Mutex名称 / 返回创建结果,true表示创建成功,false创建失败。 public static bool CreateMutex(string name) bool result = false; mutex = new Mutex(true, name, out result); return result; / / 释放Mutex / public static void ReleaseMutex() if (mutex != null) mutex.Close(); #endregion #region 设置标志实现 / / 初始化程序运行标志,如果设置成功,返回true,已经设置返回false,设置失败将抛出异常 / / 返回设置结果 public static bool InitRunFlag() if (File.Exists(RunFlag) return false; using (FileStream fs = new FileStream(RunFlag, FileMode.Create) return true; / / 释放初始化程序运行标志,如果释放失败将抛出异常 / public static void DisposeRunFlag() if (File.Exists(RunFlag) File.Delete(RunFlag); / / 获取或设置程序运行标志,必须符合Windows文件命名规范 / 这里实现生成临时文件为依据,如果修改成设置注册表,那就不需要符合文件命名规范。 / public static string RunFlag get if(runFlagFullname = null) string assemblyFullName = Assembly.GetEntryAssembly().FullName; /CommonApplicationData:/C:Documents and SettingsAll UsersApplication Data string path = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData); /C:Program FilesCommon Files /string path = Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFiles); runFlagFullname = Path.Combine(path, assemblyFullName); return runFlagFullname; set runFlagFullname = value; #endregion Program.cs文件, using System;using System.Windows.Forms;using System.Diagnostics;using Zhengzuo.CSharpCode;/*- 郑佐 2006-07-01 /zhzuo-*/namespace Zhengzuo.Test.WinGui static class Program STAThread static void Main(string args) if (args.Length = 0) /没有传送参数 Process p = SingleInstance.GetRunningInstance(); if (p != null) /已经有应用程序副本执行 SingleInstance.HandleRunningInstance(p); else /启动第一个应用程序 RunApplication(); else /有多个参数 switch (args0.ToLower() case -api: if (SingleInstance.HandleRunningInstance() = false) RunApplication(); break; case -mutex: if (args.Length = 2) /参数中传入互斥体名称 if ( SingleInstance.CreateMutex(args1) ) RunApplication(); SingleInstance.ReleaseMutex(); else /调用SingleInstance.HandleRunningInstance()方法显示到前台。 MessageBox.Show(程序已经运行!); else if (SingleInstance.CreateMutex() RunApplication(); SingleInstance.ReleaseMutex(); else /调用SingleInstance.HandleRunningInstance()方法显示到前台。 MessageBox.Show(程序已经运行!); break; case -flag:/使用该方式需要在程序退出时调用 if (args.Length = 2) /参数中传入运行标志文件名称 SingleInstance.RunFlag = args1; try if (SingleInstance.InitRunFlag() RunApplication(); SingleInstance.DisposeRunFlag(); else /调用SingleInstance.HandleRunningInstance()方法显示到前台。 MessageBox.Show(程序已经运行!); catch (Exception ex) MessageBox.Show(ex.ToString(); break; default: MessageBox.Show(应用程序参数设置失败。); break; /启动应用程序 static void RunApplication() Application.EnableVisualStyles(); Application.Run(new MainForm(); 功能测试功能测试类别包括下面五类,1本地系统同一应用程序目录;2本地系统同一应用程序修改运行文件名称使两次运行名称不同;3本地系统两次运行程序目录不同,不修改文件名称;4本地系统不同会话用户登录启动应用程序;5远程计算机程序访问启动应用程序(一个程序在远程另一个在本地)。运行CMD命令行,第一种调用方式:WindowsApplication1.exe或 WindowsApplication1.exe api第二种调用方式:WindowsApplication1.exe mutex或WindowsApplication1.exe mutex F140AE26-626C-42f8-BD49-45025742205E第三种调用方式:WindowsApplication1.exe flag或WindowsApplication1.exe flag c:.zhzuo 测试结果, 匹配/互斥/标志 1同一目录 2修改名称 3不同目录 4不同用户 5远程访问 1同一目录 O/O/O 2修改名称 X/O/O 3不同目录 X/O/O 4不同用户 #/X/O 5远程访问 X/O/O 备注:O - 表示成功,X 表示失败,# - 程序第二个运行没有反应 针对远程访问的测试,需要在系统管理工具的.NET Framework 2.0 Configuration中进行设置授权该局域网路径允许访问,否则会抛出System.Security.SecurityException异常。根据测试结果可见三种实现方式适用范围不同,理想的实现是结合他们的优点进行多点判断。更多资源关于.NET平台应用的开发,更多的技术文章可以访问/zhzuoPC上获取程序当前运行目录,常用作法:1path = System.Windows.Forms.Application.StartupPath; /不包括EXE的名称2path = System.Windows.Forms.Application.ExecutablePath; /包括EXE的名称3path = System.Reflection.Assembly.GetExecutingAssembly().Location;4path = System.Environment.CurrentDirectory;PDA(WINCE)上获取方法:path= System.IO.Path.GetDirectoryName(System.Reflection.Assembly.Load( System.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 一年级语文上册第三单元公开课一等奖创新教学设计
- 一年级语文下册第八单元基础知识复习试卷
- 2025家庭装饰设计合同模板
- 彩票代理区域独家代理权合作协议范本
- 车辆合伙经营快递运输业务合作协议
- 精细化管理厂房电力安装与维护合同
- 仓储物流中心厂房抵押贷款合同范本
- 2025合同模板设备质押借款合同范本
- 护理实践中的文化敏感和多元化护理
- 执业西药师药一考试试题及答案
- 中华民族共同体概论课件专家版10第十讲 中外会通与中华民族巩固壮大(明朝时期)
- GB/T 19964-2024光伏发电站接入电力系统技术规定
- 铁路施工安全培训
- 保密知识培训与教育
- 地类及变化原因划分、数据库结构、森林资源变化图斑现地核实表、年度更新统计报表
- 材料科学基础-第9章-材料的亚稳态
- 2023(买卖合同)买卖合作协议正规范本(通用版)
- 【中国礼仪文化在高铁乘务中的体现及提升策略8000字(论文)】
- 中国胰腺囊性肿瘤诊断指南
- 验证前风险评估精密检验仪器风险评估报告
- 检验科医院感染管理质量考核标准
评论
0/150
提交评论