从项目的VB.NET运行VB类型的exe文件



我有一个关于在VB中运行exe文件的问题。NET项目。

我以前读过一篇文章http://www.dreamincode.net/forums/topic/244460-how-to-run-a-exe-file-from-inside-a-vs2010-project/

从VB.NET项目内部运行exe文件。

我使用

流程。启动("My.Resources\MyProgram.exe")和系统诊断。过程启动(My.Computer.FileSystem.SpecialDirectories.Desktop&"\screen.exe")

运行exe文件

然而,这并没有发生。因此,我认为运行exe文件的路径是错误的

以下是我为运行exe文件所做的操作

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If My.Computer.FileSystem.FileExists((My.Computer.FileSystem.SpecialDirectories.Desktop & "screen.exe")) Then
MsgBox("yes")
Process.Start((My.Computer.FileSystem.SpecialDirectories.Desktop & "screen.exe"))
Else
MsgBox("np")
End If

我手动点击exe文件,它运行正常。此外,我使用if语句来确定是否有文件

它返回true,这意味着存在一个exe文件。

不过,当我在Visual studio 2012(VB.NET)项目中运行时。并没有错误,它似乎并没有运行文件。

我真的不确定为什么会发生这种情况

有人知道为什么会发生这种事吗?感谢

我已经对此进行了测试,它在我的本地pc中运行。请确保exe文件的路径正确。

Process.Start("FolderPathMyProgram.exe")

请查看此网站下载此代码示例。示例代码

首先,资源不是文件,因此不能使用Process执行它们。开始这只会执行一个文件,因此您需要提取资源,即您自己程序文件中的字节,并将其保存为一个单独的文件。这是Windows上的一个安全问题,因此可能甚至不被允许。

至于实际的EXE没有正确运行,一个可能的原因是无效的工作目录。尝试创建ProcessStartInfo对象,并将其WorkingDirectory属性设置为包含正在运行的EXE的文件夹。这可以解决程序在其工作目录中查找依赖项的问题。

如果执行资源或执行现有的可执行文件,我不清楚您真正需要什么。

要启动资源中的exe,您可以像这样将其加载到磁盘:

' Load Resource To Disk
' ( By Elektro )
'
' Usage Examples:
' LoadResourceToDisk(My.Resources.Program, "C:Program.exe")
' Process.Start("C:Program.exe")
'
''' <summary>
''' Loads a resource to disk.
''' </summary>
''' <param name="Resource">
''' Indicates the resource to load.
''' </param>
''' <param name="TargetFile">
''' Indicates the target file to save the resource.
''' The target file is overwritten.
''' </param>
''' <returns>
''' <c>true</c> if operation succeeds, <c>false</c> otherwise.
''' </returns>
''' <exception cref="Exception"></exception>
Private Function LoadResourceToDisk(ByVal Resource As Byte(),
ByVal TargetFile As String) As Boolean
Try
Dim BufferFileStream As New IO.FileStream(TargetFile, IO.FileMode.Create, IO.FileAccess.Write)
BufferFileStream.Write(Resource, 0, Resource.Length)
BufferFileStream.Close()
Return True
Catch ex As Exception
Throw New Exception(ex.Message, ex.InnerException)
Return False
End Try
End Function

用法:

LoadResourceToDisk(My.Resources.Program, "C:Program.exe")
Process.Start("C:Program.exe")

要启动现有文件,您可以执行以下操作:

Private Sub Test() Handles Button1.Click
Dim ExePath As String =
IO.Path.Combine(My.Computer.FileSystem.SpecialDirectories.Desktop, "Screen.exe")
Dim Result As Integer
Using p As New Process()
With p.StartInfo
.FileName = ExePath
.Arguments = ""
End With
p.Start()
p.WaitForExit()
Result = p.ExitCode
End Using
MsgBox(String.Format("ExitCode: {0}", Result))
End Sub
File.WriteAllBytes(Application.StartupPath & "FilesNameToSaveTo.exe", My.Resources.ResourceFilesName)

Process.Start(Application.Startpath & "FilesNameToSaveTo.exe")

最新更新