惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 置身珠海,学习与奋斗

善用Wink,将电脑操作录屏为flash (更新图片) [转]ClickOnce部署出现 系统必备的安装位置未设置为组件供应商的网站,无法在磁盘上找到 dotNetFx40LP_Client_x86_x64cs.exe 问题的解决方案 D60 单反相机拍照后,反光板无法正常弹回,报错的解决办法。 关于ListBox绑定到自定义对象 VS 全部补丁包(20100730) 和谐UAC与应用程序配置,抛砖引玉,希望完美解决问题。 论企业信息化的三个阶段:技,术,道 关于ClickOnce在企业内部的应用 中国式管理 Virtual PC 2007 虚拟网络配置 红旗飘扬 关于 Winform 下 ReportViewer 打印异常 咱也写个小写数字转大写金额 ,纯粹字符串操作实现 中国人成功十要 有没有朋友做过动态表结构的,请教一下 自定义app_offline.htm,让网站升级提示更专业 使用PPC的朋友慎用 星空极速3.2.070416_GD 关于89S51单片机数码管显示的小工具 重新启动IIS的小工具
【转】WPF获取路径解读
置身珠海,学习与奋斗 · 2011-08-03 · via 博客园 - 置身珠海,学习与奋斗

WPF获取路径解读 【源】http://www.cnblogs.com/JarviseZhou/archive/2011/07/19/2110606.html

问题环境:WPF发布程序,使用反射需要找到dll文件的路径

asp.net和WPF获取应用程序路径

stringstr6=Application.ExecutablePath;//获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。


  stringstr7=AppDomain.CurrentDomain.SetupInformation.ApplicationBase;//获取或设置包含该应用程序的目录的名称。
  1.System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
  获取模块的完整路径。
  2. System.Environment.CurrentDirectory
  获取和设置当前目录(该进程从中启动的目录)的完全限定目录。
  3. System.IO.Directory.GetCurrentDirectory()


  获取应用程序的当前工作目录。这个

不一定是程序从中启动的目录啊,有可能程序放在C:\www里,这个函数有可能返回C:\Documentsand Settings\ZYB\,或者C:\Program Files\Adobe\,有时不一定返回什么东东,我也搞不懂了。
  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应用程序来说,他们运行的路径是不一样的,所以关键是判断当前运行的程序是哪种程序.于是我们可以使用如下的代码 stringpath = "";
  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:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\TemporaryASP.NETFiles目录。所以Web项目还是使用Server.MapPath吧。否则建议使用方法2。如果自己新建类库。可以加入对System.Windows.Forms.StartupPath的引用后使用。
  进程对象在.NET中表现为System.Diagnostics.Process类,通过调用Process.GetCurrentProcess().MainModule.FileName可获得当前执行的exe的文件名。但是这个方法得到的仅仅是文件名,如果程序运行期间没有切换工作目录,那么可以调用System.IO.Path的方法获取绝对路径。但是当前目录同样可以通过Environment.CurrentDirectory获得,而且很多软件在使用OpenDialog打开文件的时候,都会切换工作目录,而使得这一机制失效。
  如果是在WindowsForms应用程序中,当前应用也表现为System.Windows.Forms.Application对象,通过其静态属性Application.ExecutablePath和Application.StartupPath,可以取得可执行文件的路径和启动路径。
  但如果不是在Windows应用中呢,或者是在Library中呢,就算是Application对象的属性依然能获得,也需要在工程中添加System.Windows.Forms这个Assembly的引用,非常不方便。这个时候,可以通过Assembly的静态方法,GetCallingAssembly或者GetExecutingAssembly取得当前执行的Assembly,然后通过Assembly类的Location获取assembly的位置。
  但是使用Assembly的时候,可能会遇到权限方面的问题,同时Assembly.GetCallingAssembly或者Assembly.GetExecutingAssembly有可能得到的不是.exe文件的位置。在GAC中的添加了强名的Assembly,运行时是可以不必与.exe在同一目录的。
  .NET的进程启动时,会创建AppDomain,所有的Assembly都被Load到某一个AppDomain中,而AppDomain中提供了SetupInformation属性,可以获取AppDomain启动时的一些信息,因此,可以通过调用AppDomain.CurrentDomain.SetupInformation.ApplicationBase获取当前应用程序所在的路径。
  在通过以上方法取到所需的目录后,可以调用System.IO.Path的方法获取文件名,目录名,绝对路径等。停止对路径字符串的分析,而改用System.IO.Path类吧。
  开发.NET下应用程序时,了解Process/Application->AppDomain->Assembly的关系,对于实现正确的逻辑,是非常有帮助的。