Windows 将文件拖动到.exe会设置不同的工作目录

Windows 将文件拖动到.exe会设置不同的工作目录,windows,command-line,windows-explorer,Windows,Command Line,Windows Explorer,如果我有一个常规控制台应用程序(或任何其他应用程序),并使用windows资源管理器将文件拖到.exe文件上(以便将该文件用作“命令行输入”),则当前目录将设置为其他目录(我的主文件夹?),而不是应用程序所在的目录。如果我双击应用程序启动它,则当前目录设置正确 这是什么原因?有没有办法将应用程序的文件夹用作当前目录?搜索我在上找到此文件夹的原因: [应用程序]简单地继承任何资源管理器的工作目录 这与我自己的观察结果一致,例如键盘上的可编程键 我的解决方法是重置工作目录。在C#中,您可以这样做:

如果我有一个常规控制台应用程序(或任何其他应用程序),并使用windows资源管理器将文件拖到.exe文件上(以便将该文件用作“命令行输入”),则当前目录将设置为其他目录(我的主文件夹?),而不是应用程序所在的目录。如果我双击应用程序启动它,则当前目录设置正确


这是什么原因?有没有办法将应用程序的文件夹用作当前目录?

搜索我在上找到此文件夹的原因:

[应用程序]简单地继承任何资源管理器的工作目录

这与我自己的观察结果一致,例如键盘上的可编程键

我的解决方法是重置工作目录。在C#中,您可以这样做:

System.Environment.CurrentDirectory = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);

当您在Linux上启动mono应用程序而不使用命令行时,您也必须这样做。

这正是您的应用程序不应该首先依赖工作目录的原因。文件的完整路径将在命令行中指定。如果需要,从中解析路径。

情况并非总是如此。如果在Windows 7上,我从命令行运行
TestApp“test”
,参数[0]将是“TestApp”,而不是完整路径。我指的是Windows在其他参数中为单击的文件名传递的路径。当路径作为文件扩展名注册或shell扩展名的一部分传入时,该路径始终是完整路径。