Как я могу запустить команду **cd..**
за кулисами Windows Form? (т.е. пользователь не видит его)
Благодарю.
Как я могу запустить команду **cd..**
за кулисами Windows Form? (т.е. пользователь не видит его)
Благодарю.
См. System.Diagnostics.Process http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx
Существует также этот ответ SO на тот же самый точный вопрос: fooobar.com/questions/16630/...
Пример:
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();
Вы можете инициализировать новую System.Diagnostics.ProcessStartInfo
которая имеет информацию, необходимую для запуска вашего процесса, в дополнение к WindowStyle
которая указывает состояние окна, которое будет использоваться при запуске процесса, который может быть Hidden
, Maximized
, Minimized
или Normal
. В вашем случае мы будем устанавливать это как " Hidden
чтобы процесс, который будет запущен, не сможет получить ни вход, ни показ вывода от пользователя.
пример
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
Скриншот
Следующий скриншот представляет диспетчер задач, показывающий один процесс, который был запущен нашим приложением. Однако его Окно не видно.
Примечание. Запуск процесса не прекратится, даже если вы закроете приложение.
Кроме того, для запуска процесса в качестве администратора вы можете установить свойство Verb
для информации о запуске процесса для runas
пример
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
Примечание. Если у вас включен элемент управления учетными записями пользователей, вы можете попросить разрешить запуск процесса с повышенными разрешениями, если приложение, которое пыталось вызвать этот процесс, не выполнялось с повышенными разрешениями.
Если вы хотите пропустить приглашение, я думаю, что вы должны разрешить основному приложению начинать с повышенных разрешений. Для этого вам нужно открыть манифест приложения и убедиться, что добавлена следующая строка
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
Это просто скажет, что ваше приложение запускается только с повышенными разрешениями. Таким образом, когда вы вызываете процесс как администратор, не будет приглашения, так как вызывающий процесс выполняется под администратором.
Благодаря,
Надеюсь, вы найдете это полезным :)
Фрагмент "невидим" для пользователя, а также перенаправляет вывод, чтобы вы могли его каким-то образом использовать (я полагаю, вам это нужно).
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
}
}