我正在创建一个“简单”程序,按下按钮就可以了:
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", "")
它工作正常,但我显然需要在其中包含所需文件的文件夹。
我做错了什么?
答案 0 :(得分:1)
很多人似乎没有意识到资源是什么。向项目添加资源的重点是将其包含的数据编译到EXE中。项目中的Resources文件夹只是存储原始源文件的位置。就应用程序而言,它不存在,就像您的VB源代码文件不存在一样。构建项目时,这些资源中的数据将编译到EXE中,因此它们不再是文件,不能再用作文件。
这就是为什么你不将其他EXE文件嵌入为资源的原因。您可以先提取资源并将其另存为文件,但我建议不要这样做。向项目中添加一个新文件夹,并将EXE文件和任何依赖项添加到该文件夹,并将其Build Action设置为Content。然后将它们原样复制到输出文件夹中。然后,您可以执行EXE文件,因为它是一个EXE文件。您还应该使用Application.StartupPath作为文件路径的根目录,而不是依赖于您认为的当前目录。
答案 1 :(得分:0)
如果它是一个Web应用程序,您应该始终检查是否会在全局asax的应用程序启动中执行此操作。如果您在其他用户帐户下运行此帐户,请检查该帐户是否具有权限。否则,即使该目录存在,如果它无法访问它或者没有执行该文件的权限,它也将失败。
如果你提供实际的例外,可能会告诉你更多。即未经授权或不存在。