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

时间:2014-01-26 14:44:15

标签: 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

在visual studio中进行测试时,一切正常,但是一旦我发布和安装,即使资源文件夹位于安装目录中也不行。

如果我将其更改为:

proc = Process.Start("c:\resources\navcoder.exe", "")

它工作正常,但我显然需要在其中包含所需文件的文件夹。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

如果你提供实际的例外,可能会告诉你更多。即未经授权或不存在。