【问题标题】:Application built using VS2010 does not work in VS-Express2008 - C使用 VS2010 构建的应用程序在 VS-Express2008 中不起作用 - C
【发布时间】:2010-05-02 18:04:45
【问题描述】:

我在一个解决方案中编写了一个包含两个项目的应用程序,每个项目仅包含 1 个 .c 源文件。我使用的是 Visual Studio 2010 Ultimate,但由于大学只支持 2008,我决定创建一个空白解决方案并将源文件复制到新的解决方案中。

在 VS2008 express 中创建新解决方案后,创建两个项目并重新创建源文件并将其添加到我运行应用程序的项目中。

由于某些原因,只有一部分应用程序无法运行,我使用 CreateProcess() 从 Project 2 中执行“Project1.exe”。

这在 vs2010 下运行良好,但由于某种原因它在 VS2008 express 下无法运行,GetLastError() 显示错误 2:未找到文件。

这是在两个 IDE 中显示相同代码的图像:

我没有使用任何特殊的东西,并且我确保两个解决方案/项目都使用 .Net 3.5。

我不明白为什么它适用于一个 IDE 而不是另一个。

有什么建议吗?谢谢!

编辑:

.exe 的屏幕截图

【问题讨论】:

  • 如果错误消息是“找不到文件”,您是否确定您尝试启动的 exe 实际上位于您假设的位置?从屏幕截图看来,您使用的是相对路径。工作文件夹是一样的吗?
  • 是的,它是一样的,我确保独立构建每个项目只是为了确保创建 .exe。它们在同一个文件夹中彼此相邻,这就是让它变得更奇怪的原因。
  • 您是从 IDE 中还是从控制台窗口启动第一个 exe?
  • 在 IDE 中,DiceConsumer.exe 被设置为启动项目,并由此调用 WM_CREATE 消息中的 CreateProcess。我进入了 VS2010 构建中的 Debug 文件夹并运行 DiceConsumer.exe 启动 DiceProducer.exe 很好。
  • 我猜它可以从控制台工作。您能检查一下 IDE 中指定的工作文件夹设置吗?

标签: c visual-studio-2008 winapi visual-studio-2010 visual-studio-express


【解决方案1】:

您没有将 .exe 的完整路径名传递给 CreateProcess()。这通常只有在你幸运的情况下才有效。 .exe 文件必须位于同一目录中,并且工作目录必须设置为该目录。首先验证 .exe 是否在您希望的位置。

通过生成第二个 .exe 的完整路径来避免对工作目录的依赖。使用 GetModuleFileName(),传递 NULL,获取第一个 .exe 的完整路径

【讨论】:

  • 它在 VS2010 中工作,因为两个 .exe 都在同一个文件夹中。我无法明确指定路径,因为它们可能会被移动。一个例子是解决方案文件夹现在在我的桌面上,但它可能会被移动到我的文档中。
  • @Jamie,这就是我推荐你使用 GetModuleFileName() 的原因。无论 .exes 位于何处,也无论当前工作目录指向何处,它都能使您的代码正常工作。
猜你喜欢
  • 1970-01-01
  • 2011-07-16
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 2014-12-25
  • 1970-01-01
  • 2011-09-11
  • 2016-11-02
相关资源
最近更新 更多