我有一个关于在VB .NET项目中运行exe文件的问题。
我之前读过文章 http://www.dreamincode.net/forums/topic/244460-how-to-run-a-exe-file-from-inside-a-vs2010-project/从VB.NET项目内部运行exe文件。
我用过
的Process.Start( “My.Resources \ MyProgram.exe”) 和 System.Diagnostics.Process.Start(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)项目中运行时。 没有错误,似乎没有运行文件。
我不确定为什么会发生这种情况
有人知道为什么会这样吗?感谢
答案 0 :(得分:1)
我已经测试了这个,它在我的本地电脑上运行。 确保你有正确的exe文件路径。
Process.Start("FolderPath\MyProgram.exe")
请检查此站点以下载此代码示例。 Example Code
答案 1 :(得分:0)
首先,资源不是文件,因此您无法使用Process.Start执行它们。这将仅执行一个文件,因此您需要提取资源,这只是您自己的程序文件中的字节,并将其另存为单独的文件。这在Windows上是一个安全问题,所以甚至可能都不允许。
对于实际的EXE运行不正常,一个可能的原因是工作目录无效。尝试创建ProcessStartInfo对象并将其WorkingDirectory属性设置为包含您正在运行的EXE的文件夹。这可以解决在工作目录中查找依赖项的程序的问题。
答案 2 :(得分:0)
如果执行资源或执行现有的可执行文件,我不清楚你真正需要什么。
要启动资源中的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
答案 3 :(得分:0)
File.WriteAllBytes(Application.StartupPath & "\FilesNameToSaveTo.exe", My.Resources.ResourceFilesName)
Process.Start(Application.Startpath & "\FilesNameToSaveTo.exe")