【问题标题】:C# Equivalent of %0 in batchC# 等效于批处理中的 %0
【发布时间】:2013-12-15 12:46:29
【问题描述】:

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

call %0 "Arguments"

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

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

提前致谢,莫娜。

【问题讨论】:

    标签: c# batch-file command-line-arguments


    【解决方案1】:

    这应该可以帮助你MSDN

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

    System.AppDomain.CurrentDomain.FriendlyName
    

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

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

    【讨论】:

    • 次要技术问题:如果执行此行的代码不是在默认应用程序域中运行,而是在名为“Foo”的自定义应用程序域中运行怎么办? (我没有否决这个答案。)
    • 谢谢,效果很好,但 CodeslnChaos 对我来说效果更好。
    • FriendlyName 可以由主机选择,不一定是可执行文件的路径。
    【解决方案2】:

    您可以在Main 中使用Assembly.GetExecutingAssembly().Location

    【讨论】:

    • 这给出了执行程序集(可能是类库)的路径,而不是最初启动的进程的路径。所以它不等同于%0
    • @CodesInChaos:Mona 说“我想要用户运行的可执行文件的名称来启动我的程序”,因此在这种情况下执行程序集就是可执行文件本身。我错了吗?
    • 如果你把它放在类库中就不会。在这种情况下,这将返回 .dll 而不是 .exe
    【解决方案3】:

    Environment.GetCommandLineArgs() 批量返回不同命令行参数的数组,分别对应%0, %1,...。

    所以你可以使用Environment.GetCommandLineArgs()[0] 启动进程。

    (如果我没记错的话,这种技术有一个陷阱:这可以是 8.3 名称 MYAPPL~1.EXE 而不是全名,这取决于程序是如何启动的。幸运的是,现在很少使用这些名称)

    【讨论】:

    • 等一下,如果我从Main 中排除string[] args,我仍然可以访问和参数用户输入?
    • 是的,AFAIK 这相当于Main 上的args
    猜你喜欢
    • 2021-03-28
    • 2021-06-07
    • 2015-03-16
    • 1970-01-01
    • 2012-09-28
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多