vb.net文件路径导致已发布exe中的崩溃

vb.net文件路径导致已发布exe中的崩溃,vb.net,Vb.net,我正在制作一个“简单”的程序,点击按钮可以执行以下操作: Private Sub Button4_Click(sender As Object, e As EventArgs) Dim proc As New System.Diagnostics.Process() proc = Process.Start("resources\navcoder.exe", "") proc.WaitForExit() End Sub 在VisualStudio中进行测试时,所有这些

我正在制作一个“简单”的程序,点击按钮可以执行以下操作:

Private Sub Button4_Click(sender As Object, e As EventArgs)
    Dim proc As New System.Diagnostics.Process()

    proc = Process.Start("resources\navcoder.exe", "")
    proc.WaitForExit()
End Sub
在VisualStudio中进行测试时,所有这些都可以正常工作,但在发布和安装之后,即使资源文件夹位于安装目录中,也无法正常工作

如果我将其更改为:

proc = Process.Start("c:\resources\navcoder.exe", "")
它工作得很好,但我显然需要有一个文件夹,其中包含所需的文件


我做错了什么?

您应该始终检查是否存在,如果它是一个web应用程序,请在全局asax的应用程序启动中执行此操作。如果您在其他用户帐户下运行此操作,请检查该帐户是否具有权限。否则,即使该目录存在,如果它无法访问该目录或没有执行该文件的权限,它也将失败


如果您给出实际的异常情况,可能会告诉您更多。即未经授权或不存在

很多人似乎没有意识到什么是资源。向项目中添加资源的全部目的是将其包含的数据编译到EXE中。项目中的Resources文件夹只是存储原始源文件的地方。就应用程序而言,它并不存在,就像你的VB源代码文件不存在一样。构建项目时,这些资源中的数据将编译到EXE中,因此它们不再是文件,也不能再用作文件

这就是为什么不将其他EXE文件嵌入为资源。您可以先提取资源并将其保存为文件,但我建议您不要这样做。将新文件夹添加到项目中,将EXE文件和任何依赖项添加到该文件夹中,并将其生成操作设置为内容。然后,它们将按原样复制到输出文件夹中。然后可以执行EXE文件,因为它是EXE文件。您还应该使用Application.StartupPath作为文件路径的根目录,而不是依赖于您认为的当前目录