如何确定一个C#应用程序是从桌面还是命令提示符中启动的?

5

我怎样才能知道C#应用程序是从桌面还是命令行启动的?

MSDN文档在这个部分有点模糊。也许有人可以帮我解决这个问题:)

非常感谢!


请原谅我问一下,但这会有什么区别吗?你想做什么? - Brian Rasmussen
如果我通过cmd shell启动小应用程序,则输出必须进入shell窗口。如果我通过桌面启动它,将打开一个msgbox,显示结果并将其复制到剪贴板,如果我按下正确的按钮。这没什么特别的。 - MrMarco
4个回答

5

这个似乎可以工作:

string[] args = System.Environment.GetCommandLineArgs();

if(args[0] == "you exe name"){ ...}

如果你双击它,args [0] 包含完整的文件夹路径。
注意,你需要实际调用 .GetCommandLineArgs(),在典型的 static void Main(string[] args) 中,args [] 参数已被删除。
-- 编辑
这只会检测是否从与 .exe 文件本身相同的路径运行。如果你从一个子文件夹 (foo\hello.exe) 运行它,它将不起作用。

如果您在命令行上实际指定了完整路径,也不会起作用。 - Tal Pressman
是的 Tal:这就是我解释的;第一个参数是你输入以执行它的内容。 - Noon Silk

3
尝试获取父进程:
            var pc = new PerformanceCounter("Process", "Creating Process Id",
            Process.GetCurrentProcess().ProcessName);
        var p = Process.GetProcessById((int)pc.RawValue); 

不确定当有多个相同进程实例时是否有效。在这种情况下,最好使用这种方法:http://www.codeproject.com/KB/threads/ParentPID.aspx


1

我很确定没有一种方法可以知道这个,这就是为什么文档是“模糊的”的原因。


0
MSDN文档可能有些模糊,但这里有一个直接的方法来判断你的C#应用程序是从桌面还是命令行启动的:
if (Console.Title == System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName) {
  Console.WriteLine("You clicked on this from Explorer, but this is a console app. Run it from a shell.");
  Console.WriteLine("Press any key to continue (and have a great day)..."); Console.ReadKey(); return;
}
Console.WriteLine("Console app stuff MaxIsAwesome...");

当从命令提示符运行C#控制台应用程序时,Console.Title属性通常设置为类似于“命令提示符 - cmd.exe”的内容。然而,如果通过在资源管理器中双击运行,标题将设置为应用程序的完整路径,以便区分这两种启动方法。这并不是绝对可靠的,但你可以进行实验,并为你的特定项目找到一些可行的解决方案。祝你好运!
编辑:尽管这个问题是13年前发布的,但没有得到答复,一些回复认为这是不可能的。事实并非如此。回答这样的问题总比让它们悬而未决要好。

你是不是用ChatGPT生成了你的原始回答? - Jeremy Caney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接