我有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时有没有办法传递参数?
答案 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毫秒更改一次选定的行,编写文件应该可以正常工作。