如何使用参数从另一个vb.application打开vb.application

时间:2010-07-19 15:08:10

标签: vb.net

我有2个vb应用程序。这是第一个代码,当单击一个按钮时,它将检查另一个应用程序是否已经打开。如果没有,它将打开该应用程序 -

Dim sComputer As String
    sComputer = Environ("COMPUTERNAME")
    Dim LocalByName As Process() = Process.GetProcessesByName("ticket.prices", sComputer)
    If LocalByName.Length = 0 Then
        System.Diagnostics.Process.Start("http://ticket.prices.application")
    End If

运行正常。但我需要的是应用程序1上调用应用程序2的customerid应该在打开应用程序2时进行转移。 例如 - 客户10001屏幕在应用程序1上打开。当我点击打开应用程序2时,上面的代码运行并打开应用程序2.如何让应用程序2打开客户10001屏幕。在System.Diagnostics.Process.Start中打开app 2时有没有办法传递参数?

2 个答案:

答案 0 :(得分:2)

使用带有2个字符串的'Process.Start'版本,第二个是命令行参数。有关详细信息,请参阅here

答案 1 :(得分:1)

您需要ProcessStartInfo类,或使用Start方法获取字符串。 ProcessStartInfo为您提供了很多关于如何启动程序的选项,这通常会派上用场。很高兴熟悉它。

Dim info as New ProcessStartInfo()
info.Arguments = "10001"
info.FileName = "exename"
Dim LocalByName as New Process()
LocalByName.StartInfo = info
LocalByName.Start()

通过Environment.GetCommandLineArgs()

获取新程序中的参数
For Each arg As String In Environment.GetCommandLineArgs()
    Console.WriteLine(arg)
Next arg

看起来你最终要完成的是从App 1获取当前选定的行并将其传递给第二个程序。它是否正确?这开启了一个全新的蜡球,涉及进程间通信。

编辑:获取所选编辑的最简单方法是将id写入文本文件。执行此操作时必须小心,因为如果只编写System.IO.File.WriteAllText("selectedrow.txt", "123"),则会写入应用程序的启动路径目录。你想要得到exe的当前路径如下

Dim u as New Uri(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
dim exepath as String = System.IO.Path.GetDirectoryName(u.LocalPath)
dim fullPath as String = System.IO.Path.Combine(exepath, "selectedrow.txt")
System.IO.File.WriteAllText(fullpath, "123")

每次更改行时,这都会覆盖文件中的文本。您希望将其包装在try / catch块中,以免使程序崩溃。确保记录错误;不要只是吞下它们。要阅读数据,您只需

dim id as string = System.IO.File.ReadAllText(PathToFileYoureWritingToInTheOtherProgram)

在另一个程序中。

这不一定是处理事情的最佳方式,但它是我所知道的最简单的方法。

如果你是一个更好的解决方案,你可能会看MessageQueues,但只要你不是每100毫秒更改一次选定的行,编写文件应该可以正常工作。