C#Process.Start和Process.StartInfo错误

玛格豆

我试图使用以下命令在窗体上单击按钮以打开应用程序(.exe):

System.Diagnostics.Process.Start("C:\\Games\\GameDir\\Game.exe");

并且应用程序执行并显示错误消息“找不到background.jpg,应用程序将立即退出。”

所涉及的.jpg位于.exe外部的名为“数据”的文件夹中(相同目录,即C:/ Games / GameDir / data)。因此,我尝试使用:

System.Diagnostics.ProcessStartInfo pInfo = new System.Diagnostics.ProcessStartInfo();
pInfo.WorkingDirectory = "C:\\Games\\GameDir\\";

//Also tried pInfo.WorkingDirectory = "C:\\Games\\GameDir"; without ending slashes
pInfo.FileName = "Game.exe";
pInfo.UseShellExecute = false;
System.Diagnostics.Process.Start(pInfo);

并且该项目无法生成,因为“系统找不到指定的文件”(Process.Start(pInfo)上的错误)。

我必须创建可执行文件的快捷方式,然后启动该快捷方式:

System.Diagnostics.Process.Start("C:\\Games\\GameDir\\Game.exe - Shortcut");

终于成功了。

我的问题是-为什么世界上的pInfo.WorkingDirectory无法正常工作?快捷方式的“ C:/ Games / GameDir”的“开始于”属性与pInfo.WorkingDirectory =“ C:/ Games / GameDir”有何不同?他们不是同一回事吗?

汉斯·帕桑特

许多程序都遭受与您的程序相同的错误。他们的代码中将有一条与此语句类似的语句:

  var backImage = Image.FromFile(@"data\background.jpg");

那是相对路径名。与完整路径名相反,例如@“ c:\ games \ gamedir \ data \ background.jpg。当操作系统被迫处理相对路径名时,它必须使用默认驱动器和默认目录来查找.NET程序中的文件Environment.CurrentDirectory。

所以,当你使用“的Game.exe”,操作系统被迫使用您的默认目录下创建一个全路径名。提出类似“ c:\ users \ margot \ documents \ visual studio 2013 \ projects \ gamestarter \ bin \ debug \ game.exe”的文件。Kaboom,它不在那儿。

默认工作目录的概念非常邪恶,并且使许多程序崩溃。这是您可以想象的最差的全局变量。并且具有与全局变量相关的所有问题,它可以在不引起您注意的情况下发生更改,并且在您依赖它时会崩溃。只需调用未编写的代码即可更改它。.NET中最臭名昭著的示例是OpenFileDialog类。忘记将其RestoreDirectory属性设置为true是一个标准错误。

默认目录的概念来自1970年代,那时候每个人都通过在命令行界面外壳程序中键入其名称来启动程序。这很清楚地显示了默认目录的位置。您在运行Cmd.exe时仍然可以看到此消息,您会看到“ DOS提示符”。但是在GUI操作系统中这是非常邪恶的,您再也看不到它了。

要修复该游戏,可能您无能为力。您找到了正确的解决方法,需要设置ProcessStartInfo.WorkingDirectory才能保持满意。

在您自己的代码中,请牢记黄金法则:在代码中引用文件时,切勿使用相对路径。在您的程序中,这应该是一个配置设置,因为您不能假定游戏将始终安装到c:\ games \ gamedir。迟早会有人认识到它属于c:\ program文件:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C#Process.Start和Process.StartInfo错误

来自分类Dev

Process.Start和Process.StartInfo无法正确传递参数

来自分类Dev

c#Process Start启动所需的应用程序,但该应用程序运行不正常

来自分类Dev

C#-Process.Start()

来自分类Dev

C#Process.Start路径

来自分类Dev

C#process.start参数

来自分类Dev

C#中的Process.Start系统找不到指定的文件错误

来自分类Dev

Start-Process Powershell命令中的动词RunAs导致错误

来自分类Dev

使用Process.Start()和Windows Task Scheduler的异常

来自分类Dev

System.Diagnostics.Process.Start()参数dotnet和diff

来自分类Dev

使用具有不同用户名的Process.StartInfo时隐藏控制台窗口

来自分类Dev

使用c#和Process.Start打开默认的浏览器窗口

来自分类Dev

Azure函数Process.Start()C#,因为其他用户获得了访问被拒绝的错误

来自分类Dev

Vue 项目和 googleapis - 不会构建 - child_process 错误

来自分类Dev

Powershell Start-Process:由于错误而无法执行此命令:访问被拒绝

来自分类Dev

传递给 Process.Start 的参数中的字符串编码错误

来自分类Dev

在VBA中使用CreateProcess和Powershell Start-Process时,Set-ItemProperty无法找到路径

来自分类Dev

启动某些.lnk文件并使用Process.Start和SHGetFileInfo()获取其图标时出错

来自分类Dev

Process.Start(URL)失败

来自分类Dev

无法识别Process.Start

来自分类Dev

Process.start()异常行为

来自分类Dev

Process.Start() 的已知问题?

来自分类Dev

控制System.Diagnostics.Process.Start C#的操作

来自分类Dev

C#Process.Start:空格即使引用也不起作用

来自分类Dev

使用c#Process.Start()打开Visual Studio项目

来自分类Dev

由C#Process.Start()启动的进程是否继承ErrorMode?

来自分类Dev

控制System.Diagnostics.Process.Start C#的操作

来自分类Dev

c#Process.Start()方法如何自动知道文件的位置?

来自分类Dev

C# 进程在 Process.Start() 后被取消

Related 相关文章

  1. 1

    C#Process.Start和Process.StartInfo错误

  2. 2

    Process.Start和Process.StartInfo无法正确传递参数

  3. 3

    c#Process Start启动所需的应用程序,但该应用程序运行不正常

  4. 4

    C#-Process.Start()

  5. 5

    C#Process.Start路径

  6. 6

    C#process.start参数

  7. 7

    C#中的Process.Start系统找不到指定的文件错误

  8. 8

    Start-Process Powershell命令中的动词RunAs导致错误

  9. 9

    使用Process.Start()和Windows Task Scheduler的异常

  10. 10

    System.Diagnostics.Process.Start()参数dotnet和diff

  11. 11

    使用具有不同用户名的Process.StartInfo时隐藏控制台窗口

  12. 12

    使用c#和Process.Start打开默认的浏览器窗口

  13. 13

    Azure函数Process.Start()C#,因为其他用户获得了访问被拒绝的错误

  14. 14

    Vue 项目和 googleapis - 不会构建 - child_process 错误

  15. 15

    Powershell Start-Process:由于错误而无法执行此命令:访问被拒绝

  16. 16

    传递给 Process.Start 的参数中的字符串编码错误

  17. 17

    在VBA中使用CreateProcess和Powershell Start-Process时,Set-ItemProperty无法找到路径

  18. 18

    启动某些.lnk文件并使用Process.Start和SHGetFileInfo()获取其图标时出错

  19. 19

    Process.Start(URL)失败

  20. 20

    无法识别Process.Start

  21. 21

    Process.start()异常行为

  22. 22

    Process.Start() 的已知问题?

  23. 23

    控制System.Diagnostics.Process.Start C#的操作

  24. 24

    C#Process.Start:空格即使引用也不起作用

  25. 25

    使用c#Process.Start()打开Visual Studio项目

  26. 26

    由C#Process.Start()启动的进程是否继承ErrorMode?

  27. 27

    控制System.Diagnostics.Process.Start C#的操作

  28. 28

    c#Process.Start()方法如何自动知道文件的位置?

  29. 29

    C# 进程在 Process.Start() 后被取消

热门标签

归档