我是初学者,所以我会尽量清楚。我想知道是否可以运行自定义应用程序并让它返回并将结果存储在boolean,int或string中另一个应用程序(调用它的那个)?基本上我希望它的行为类似于一个返回值的函数,而不是另一个调用它的程序。我想在VB.net中这样做。在使用boolean:
时,有类似的东西 a = Process.Start("C:\path_to\myapp.exe")
if (a) then
'execute
end if
答案 0 :(得分:0)
在最简单的层面,不,过程机制的设计本身并不具备做你所建议的能力。您可以获得的最接近的是被调用的进程以特定的返回值退出,但这需要使用特定的API(GetExitCodeProcess) - 而不是您在此处说明的Start方法的返回。
您可以执行以下操作:捕获新进程的输出,这不是一个非常强大的解决方案,或者创建一个包含"调用"的值的临时文件。进程可以读取,这甚至不太健壮。另一个极端是调查进程间通信的特定技术。
如果您可以对问题进行扩展,可以提供更具体的可能解决方案。如果您感兴趣的值是由库或某些共享代码生成的,那么可能会提供更合适的返回机制。
答案 1 :(得分:0)
以下是ConsoleApplication的一个示例:
Imports System.IO
Module Main
Sub Main()
Dim Output As Boolean = File.Exists(My.Computer.FileSystem.SpecialDirectories.Desktop & "\file.txt")
Console.WriteLine(Output)
End Sub
End Module
如何阅读上一个控制台应用程序的输出(stdout)(此函数返回 Boolean
):
Public Function GetOutput(executable As String) As Boolean
Using p As New Process With {.StartInfo = New ProcessStartInfo With {
.CreateNoWindow = True,
.FileName = executable,
.RedirectStandardOutput = True,
.WindowStyle = ProcessWindowStyle.Hidden,
.UseShellExecute = False}}
p.Start()
Dim output As String = p.StandardOutput.ReadToEnd()
p.WaitForExit()
Return CBool(output.Trim)
End Using
End Function
现在,您可以使用此功能执行您想要执行的操作:
a = GetOutput("C:\path_to\myapp.exe")
If a Then
'execute
End If
另见(在C#中):How to make a Main Method of a console based application to return a string type。