2010-07-19 1 views
0

У меня есть 2 приложения vb. это код для первого, который при нажатии кнопки проверяет, открыто ли другое приложение. В противном случае он откроет эту заявку -Как открыть vb.приложение из другого 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, должен был быть перенесен при открытии приложения 2. eg - Экран клиента 10001 открыт в приложении 1. Когда я нажимаю открытое приложение 2, приведенный выше код запускается и открывает приложение 2. Как сделать приложение 2 открытым для экрана клиента 10001. Есть ли способ передать параметры при открытии приложения 2 в System.Diagnostics.Process.Start?

ответ

2

Используйте версию «Process.Start», которая занимает 2 строки, вторая - параметры командной строки. См. here.

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 

Это выглядит как то, что вы в конечном итоге хотите достичь получает выбранную строку из приложения 1 и мимоходом, что ко второй программе , хоть. Это верно? Это открывает целый новый воск, включающий межпроцессное общение.

EDIT: Самый простой способ получить выбранное редактирование - это записать id в текстовый файл. Вы должны быть осторожны, когда делаете это, потому что, если вы просто напишете System.IO.File.WriteAllText("selectedrow.txt", "123"), вы напишете его в каталоге путей запуска приложения. Вы хотите, чтобы получить текущий путь ЕХА как ниже

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 мс, запись файла должна работать нормально.

+0

да что я хочу. Это неправильный способ сделать это? – refer

+0

Неплохо, но это может значительно усложнить ситуацию. Простейшей задачей было бы записать выбранный в данный момент id в файл всякий раз, когда вы меняете выбор в своем приложении, что может быть выполнено с помощью одной строки: 'System.IO.File.WriteAllText (« selectedid.txt », SelectedId) '. Это медленный процесс и является взломом в IPC, но он более прост, чем другие методы IPC. –

Смежные вопросы