How to get file name of .EXE
Possible Duplicates:
Getting the path of the current assembly
C#: How do I get the path of the assembly the code is in?
使用VB 2008,如何从内部获取正在运行的.exe的文件名?
编辑:这是一个控制台应用程序,所以Application.ExecutablePath不起作用。
- 这已经被问过很多次了,所以-尝试使用搜索。我找到了一个-stackoverflow.com/questions/864484/…
- 另外:stackoverflow.com/questions/52797/…它不像可执行路径那么简单,因为加载了一些程序集,请单击一次。
- 我搜了一下,什么也没找到。现在很明显,但我在搜索.exe而不是程序集。@理查多尽量不要做个混蛋。
- 喝倒采。不完全是复制品。我找不到这些,因为我在搜索.exe而不是程序集。
- 此外,你为什么要回答这个问题,然后投票结束它(史蒂文·苏迪特,罗兰德·肖)?
有几种方法:
1
| Application.ExecutablePath |
或
1
| System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName |
或
1
| System.Reflection.Assembly.GetExecutingAssembly().Location |
- 好的,但是应用程序在system.windows.forms中。这是WinForm应用程序吗?
- 非常感谢您添加我的答案。
- rruz,我认为oplopanax在使用getentryassembly而不是getexecutingassembly方面有一个很好的观点。同样,codebase比location更好,因为它不包含路径。
这个问题以前已经回答过了。
从代码中的任何地方,您都可以位于由原始exe加载的程序集中。也可能没有对应用程序singleton的引用,因此使用assembly类是最好的选择。
最安全的方法是assembly.getEntryassembly()。location获取文件系统上程序集当前所在的位置。如果是卷影复制,则这是卷影复制位置。如果单击"一旦部署",那么这是到沙盒区域中文件的疯狂路径。
程序集的原始位置将位于assembly.getEntryassembly().codeBase。
- 在单击一次部署的情况下,流程方法是否返回有用的结果?
- 我并不完全确定,但我认为进程方法将获得ClickOnce启动程序进程的名称,这与Web应用程序获得IIS工作进程的方式大致相同。
process.getcurrentprocess().main模块
编辑
另一种方法可能是使用environment.getcommandlineargs()[0],但我更喜欢使用process。
- steve必须是process.getcurrentprocess().mainmodule.filename
- 这并不完全正确:您可以选择获取文件名或模块名。
- modulename获取关联进程的主模块。不是文件名。
- 这取决于你需要什么,也许更有用。
你应该在房产里找到:Application.ExecutablePath。
- 我并没有投你反对票,但你可能会注意到,如果在你投反对票之前Rruz给出了答案。
- 啊,但我已经包含了一个文档链接,这就是为什么我要保持我的回答(也是为什么他打败我几秒钟的原因)
- 好吧,我将投票支持你中立。
- 它又赢得了一次随机投票?
- 非常奇怪。你的回答实际上没有错。
- 帮助解决了问题。
- 我可以用上票来抵消下票。但是,我曾经这样做过,然后在评论中错误地承认了这一点。哇,我被打过吗?显然我投了反对票没关系,但我公开承认这是为了抵消反对票的影响,这真的激怒了一些人。其中一些人接着进行了一次巫术狩猎,几乎对我留下的每一个答案都投了反对票。