应用程序可以用来表现得像一个函数吗?

时间:2015-08-26 12:59:05

标签: vb.net interprocess inter-process-communicat

我是初学者,所以我会尽量清楚。我想知道是否可以运行自定义应用程序并让它返回并将结果存储在boolean,int或string中另一个应用程序(调用它的那个)?基本上我希望它的行为类似于一个返回值的函数,而不是另一个调用它的程序。我想在VB.net中这样做。在使用boolean:

时,有类似的东西
 a = Process.Start("C:\path_to\myapp.exe")
 if (a) then 
    'execute
 end if

2 个答案:

答案 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