C#相当于批处理中的%0

C#相当于批处理中的%0,c#,batch-file,command-line-arguments,C#,Batch File,Command Line Arguments,好的,在批处理文件中使用%0将返回批处理文件的位置和名称。例如 call %0 "Arguments" 这将导致批处理文件使用指定的参数调用自身。虽然我的要求有点不同,但我想知道是否有一种方法可以在C#中实现这一点。基本上,我需要用户启动我的程序时运行的可执行文件的名称 在批处理中,这是在用户重命名程序时使用的,但由于C#是面向对象的,因此不需要这样做。到那时,一定还有一些老办法可以做到这一点 提前谢谢你,蒙纳。这应该对你有帮助 默认应用程序域的友好名称是文件名 进程的可执行文件。例如,如果可

好的,在批处理文件中使用
%0
将返回批处理文件的位置和名称。例如

call %0 "Arguments"
这将导致批处理文件使用指定的参数调用自身。虽然我的要求有点不同,但我想知道是否有一种方法可以在C#中实现这一点。基本上,我需要用户启动我的程序时运行的可执行文件的名称

在批处理中,这是在用户重命名程序时使用的,但由于C#是面向对象的,因此不需要这样做。到那时,一定还有一些老办法可以做到这一点

提前谢谢你,蒙纳。

这应该对你有帮助

默认应用程序域的友好名称是文件名 进程的可执行文件。例如,如果可执行文件用于 启动的进程是“c:\MyAppDirectory\MyAssembly.exe”,友好的 默认应用程序域的名称为“MyAssembly.exe”

我认为它回答了这个问题:

我想要用户启动我的程序时运行的可执行文件的名称

这应该对你有帮助

默认应用程序域的友好名称是文件名 进程的可执行文件。例如,如果可执行文件用于 启动的进程是“c:\MyAppDirectory\MyAssembly.exe”,友好的 默认应用程序域的名称为“MyAssembly.exe”

我认为它回答了这个问题:

我想要用户启动我的程序时运行的可执行文件的名称


您可以在
Main
中使用
Assembly.GetExecutingAssembly().Location
,也可以在
Main
环境中使用
Assembly.GetExecutingAssembly().Location
。GetCommandLineArgs()返回不同命令行参数的数组,对应于
%0
%1
,。。。成批地

因此,您可以使用
Environment.GetCommandLineArgs()[0]
启动流程


(如果我没记错的话,这种技术有一个缺点:根据程序的启动方式,它可以是8.3名称
MYAPPL~1.EXE
,而不是全名。幸运的是,现在很少使用这些名称)

环境。GetCommandLineArgs()
返回一个数组,其中包含不同的命令行参数,对应于
%0
%1
,。。。成批地

因此,您可以使用
Environment.GetCommandLineArgs()[0]
启动流程


(如果我没记错的话,这项技术有一个缺点:根据程序的启动方式,它可以是8.3名称
MYAPPL~1.EXE
,而不是全名。幸运的是,现在很少使用这些名称)

次要技术问题:如果执行这一行的代码没有在默认应用程序域中运行,但是在一个名为“Foo”的自定义应用程序域中?(我没有否决这个答案。)谢谢效果很好,但是CodeslnChaos对我来说效果更好。
FriendlyName
可以由主机选择,不一定是可执行文件的路径。次要技术问题:如果执行此行的代码没有在默认的应用程序域中运行,但是在一个名为“Foo”的自定义应用程序域中?(我没有投票反对这个答案。)谢谢效果很好,但是CodeslnChaos对我来说效果更好。
FriendlyName
可以由主机选择,不一定是可执行文件的路径。这提供了执行程序集(可能是类库)的路径,而不是最初启动的进程的路径。所以它并不等同于
%0
@CodesInChaos:Mona说“我想要用户启动我的程序时运行的可执行文件的名称”,所以在这种情况下,执行汇编就是可执行文件本身。我错了吗?如果你把这个放在类库里就不会了。在这种情况下,这将返回一个
.dll
而不是
.exe
。该文件给出了执行程序集(可能是类库)的路径,而不是原始启动进程的路径。所以它并不等同于
%0
@CodesInChaos:Mona说“我想要用户启动我的程序时运行的可执行文件的名称”,所以在这种情况下,执行汇编就是可执行文件本身。我错了吗?如果你把这个放在类库里就不会了。在这种情况下,这将返回一个
.dll
而不是
.exe
.Wait,因此如果我从
Main
中排除
string[/code>,我仍然可以访问用户输入的参数和参数?是的,如果我排除
string[]args
from
Main
我仍然可以访问用户输入的参数?是的,这等同于
Main
上的
args
System.AppDomain.CurrentDomain.FriendlyName