Jak uruchomić komendę **cd..**
za kulisami formularza systemu Windows? (tj. użytkownik nie może tego zobaczyć)Uruchamianie poleceń cmd z prawami administratora
Dzięki.
Jak uruchomić komendę **cd..**
za kulisami formularza systemu Windows? (tj. użytkownik nie może tego zobaczyć)Uruchamianie poleceń cmd z prawami administratora
Dzięki.
See System.Diagnostics.Process http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx
Jest to również odpowiedź na SO tym samym dokładnym pytanie:https://stackoverflow.com/a/1469790/25882
Przykład:
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = "/C copy /b Image1.jpg + Archive.rar Image2.jpg";
startInfo.Verb = "runas";
process.StartInfo = startInfo;
process.Start();
isnt/c argumenty command i/b lub jestem w błędzie – NathanProgrammer
@ Kid8/b jest argumentem dla polecenia kopiowania. Wszystko na prawo od/C jest ciągiem poleceń. –
Upewnij się także, że nie ustawiłeś UseShellExecute na false – kofifus
Fragment jest „niewidoczny "do użytkownika, a także przekierowuje dane wyjściowe, dzięki czemu można go w jakiś sposób użyć (prawdopodobnie jest to potrzebne).
string output = null;
try
{
ProcessStartInfo ps = new ProcessStartInfo("cmd");
ps.Arguments = "/c cd..";
ps.UseShellExecute = false;
// Redirects the standard output so it reads internally in out program
ps.RedirectStandardOutput = true;
// Starts the process
using (Process p = Process.Start(ps))
{
// Reads the output to a string
output = p.StandardOutput.ReadToEnd();
// Waits for the process to exit must come *after* StandardOutput is "empty"
// so that we don't deadlock because the intermediate kernel pipe is full.
p.WaitForExit();
}
}
catch
{
// manage errors
}
finally
{
if(output != null)
{
// Process your output
}
}
może zainicjować nową System.Diagnostics.ProcessStartInfo
który posiada informacje wymagane dla danego procesu, aby rozpocząć oprócz WindowStyle
który wskazuje stan okna w użyciu, gdy proces jest uruchomiony, które mogą być Hidden
, Maximized
, Minimized
lub Normal
. W twoim przypadku ustawimy to jako Hidden
, aby proces, który zostanie uruchomiony, nie był w stanie odebrać ani wejścia, ani pokazać wyjścia/użytkownikowi.
Przykład
System.Diagnostics.ProcessStartInfo myProcessInfo = new System.Diagnostics.ProcessStartInfo(); //Initializes a new ProcessStartInfo of name myProcessInfo
myProcessInfo.FileName = Environment.ExpandEnvironmentVariables("%SystemRoot%") + @"\System32\cmd.exe"; //Sets the FileName property of myProcessInfo to %SystemRoot%\System32\cmd.exe where %SystemRoot% is a system variable which is expanded using Environment.ExpandEnvironmentVariables
myProcessInfo.Arguments = "cd.."; //Sets the arguments to cd..
myProcessInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; //Sets the WindowStyle of myProcessInfo which indicates the window state to use when the process is started to Hidden
System.Diagnostics.Process.Start(myProcessInfo); //Starts the process based on myProcessInfo
ekranu
Poniżej ekranu przedstawia menedżer Zadanie pokazujący proces, który został uruchomiony w naszym zgłoszeniu. Jednak jego okno nie jest widoczne.
Wskazówka: Proces rozpoczął nie wygasa nawet po zamknięciu aplikacji.
Dodatkowo, aby uruchomić proces jako administrator może ustawić właściwość procesu Verb
rozpocząć informacji do runas
Przykład
System.Diagnostics.ProcessStartInfo myProcessInfo = new System.Diagnostics.ProcessStartInfo(); //Initializes a new ProcessStartInfo of name myProcessInfo
myProcessInfo.FileName = Environment.ExpandEnvironmentVariables("%SystemRoot%") + @"\System32\cmd.exe"; //Sets the FileName property of myProcessInfo to %SystemRoot%\System32\cmd.exe where %SystemRoot% is a system variable which is expanded using Environment.ExpandEnvironmentVariables
myProcessInfo.Arguments = "cd.."; //Sets the arguments to cd..
myProcessInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; //Sets the WindowStyle of myProcessInfo which indicates the window state to use when the process is started to Hidden
myProcessInfo.Verb = "runas"; //The process should start with elevated permissions
System.Diagnostics.Process.Start(myProcessInfo); //Starts the process based on myProcessInfo
Zawiadomienie: Jeśli masz konto użytkownika Po włączeniu kontroli możesz zostać poproszony o zezwolenie procesowi na rozpoczęcie z podwyższonymi uprawnieniami, jeśli aplikacja, która próbowała wywołać ten proces, nie działała z podwyższonymi uprawnieniami.
Jeśli chcesz pominąć monit, myślę, że powinieneś zezwolić głównej aplikacji na rozpoczęcie z podwyższonymi uprawnieniami. Aby to zrobić, musisz otworzyć okaż aplikacji i upewnij się, że dodaje się następujący wiersz
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
To będzie po prostu powiedzieć, aby rozpocząć swoją aplikację tylko z podwyższonymi uprawnieniami.Tak więc, gdy wywołasz proces jako administrator, nie będzie żadnego monitu, ponieważ wywoływacz procesu jest wykonywany przez administratora.
Dzięki,
Mam nadzieję, że to pomocny :)
nie zapomnij o '/ C' przy argumentach – newbieguy
Należy robić rzeczy bezpośrednio w C# zamiast. – SLaks
Tutaj znajdziesz pomocne informacje http://stackoverflow.com/questions/7610727/to-run-cmd-as-administrator-zalecenia-z poleceniem – Vlad