Potrzebuje uruchomic program ktory na wejsciu przyjmoje trzy parametry, jak to zrobic?
System.Diagnostics.Process.Start(Application.StartupPath + @"ścieżka do programu" + parametr1 + parametr2 + parametr3);
Potrzebuje uruchomic program ktory na wejsciu przyjmoje trzy parametry, jak to zrobic?
System.Diagnostics.Process.Start(Application.StartupPath + @"ścieżka do programu" + parametr1 + parametr2 + parametr3);
System.Diagnostics.ProcessStartInfo process = new System.Diagnostics.ProcessStartInfo(Application.StartupPath + @"\updater.exe");
process.Arguments = @"http://www.google.pl/""Parametr1""Parametr2";
System.Diagnostics.Process.Start(process);
Tak nie działa.
Tak nie działa.
Jak nie działa jak działa. Lepiej sprawdź (wyświetl sobie) jaką masz wynikową ścieżkę do programu i czy jest tam ten program.
using System;
using System.Diagnostics;
class Program {
static void Main()
{
string windir = Environment.GetFolderPath(Environment.SpecialFolder.System);
var pinfo = new ProcessStartInfo(windir+@"\notepad.exe");
pinfo.Arguments = windir+@"\drivers\etc\hosts";
Process.Start(pinfo);
}
}
Program "update.exe" jest w folderze z glownym programem ktory przekazuje parametry.
Tak program update.exe odbiera parametry:
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Main(args));
}
public Main(string[] args)
{
InitializeComponent();
arg = args;
if (arg.Length > 0)
{
url = arg[0];
old_exe = arg[1];
new_exe = arg[2];
}
}
A tak w glownym programie uruchamiam program update.exe
private void aktualizuj_Click(object sender, EventArgs e)
{
if (File.Exists(Application.StartupPath + @"\updater.exe"))
{
System.Diagnostics.ProcessStartInfo process = new System.Diagnostics.ProcessStartInfo(Application.StartupPath + @"\updater.exe");
process.Arguments = @"adres do pliku""nazwa1""nazwa2"; //3 parametry
System.Diagnostics.Process.Start(process);
}
A po wpisaniu w wiersz poleceń: updater.exe adres do pliku"nazwa1"nazwa2
działa?
Bo moim zdaniem ten ciąg znaków to jest jeden, a nie trzy parametry.
Program updater jest programem okienkowym ale przy kompilacji w trybie debug podaje każdy parametr w "" i odstęp przerwy miedzy nimi i jest ok. Kiedy natomiast wywołuje updater z innego programu chyba nie za dobrze przesyłają się te parametry
Moim zdaniem parametry powinny być oddzielone spacjami, a nie cudzysłowami jak u Ciebie.
Czyli np. tak:
process.Arguments = @"adres do pliku" + "" + "nazwa1" + "" + "nazwa2";
?
System.Diagnostics.Process.Start(process);
Application.Exit() // a czy ta linijka nie sprawia ze program nie zdarzy przeslac parametrow zanim sie zamknie?
haxy napisał(a)
Czyli np. tak:
process.Arguments = @"adres do pliku" + "" + "nazwa1" + "" + "nazwa2";
?
A gdzie tu masz spacje w stringu?
string arg1 = "lupa", arg2 = "kupa", arg3 = "pupa";
process.Arguments = arg1 + " " + arg2 + " " + arg3; //brzydko
process.Arguments = string.Format("{0} {1} {2}", arg1, arg2, arg3); //ładnie
process.Arguments = string.Format("\"{0}\" \"{1}\" \"{2}\"", arg1, arg2, arg3); //ładnie z argumentami w cudzysłowach
Dzieki, a wytlumacz po co sa te ukośniki?
"\"{0}\"
Ukośniki są po to, żeby móc umieścić w ciągu znaków znak specjalny. Cudzysłów jest właśnie znakiem specjalnym - normalnie w kodzie programu to on stanowi granicę łańcucha znaków. A zatem chcąc umieścić cudzysłów w takim łańcuchu trzeba go poprzedzić backslashem.