ShellExecute(0,
"open",
"notepad.exe",
"c:\\test.txt",
0,
SW_SHOW);
Надо запустить процесс notepad средствами WinAPI
public class ProcessInfo
{
public IntPtr hProcess;
public IntPtr hThread;
public Int32 ProcessId;
public Int32 ThreadId;
}
public class SECURITY_ATTRIBUTES
{
public Int32 nLength;
public Int32 lpSecurityDescriptor;
public bool bInheritHandle;
}
[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool CreateProcess
(
string imageName,
string cmdLine,
SECURITY_ATTRIBUTES lpProcessAttributes,
SECURITY_ATTRIBUTES lpThreadAttributes,
bool boolInheritHandles,
Int32 dwCreationFlags,
Int32 lpEnvironment,
string lpszCurrentDir,
byte[] si,
ProcessInfo pi
);
private void button5_Click(object sender, EventArgs e)
{
ProcessInfo ProcInf = null;
byte[] startUpInfo = new byte[18];
startUpInfo[0] = 18 * sizeof(byte);
///////////////////
startUpInfo[1] = 0;
startUpInfo[2] = 0;
startUpInfo[3] = 0;
///////////////////
startUpInfo[4] = 0;
startUpInfo[5] = 0;
startUpInfo[6] = 0;
startUpInfo[7] = 0;
startUpInfo[8] = 0;
startUpInfo[9] = 0;
startUpInfo[10] = 0;
startUpInfo[11] = 1;
startUpInfo[12] = 0;
startUpInfo[13] = 0;
///////////////////////////////
startUpInfo[14] = 0;
///////////////////////////////
startUpInfo[15] = 0;
startUpInfo[16] = 0;
startUpInfo[17] = 0;
SECURITY_ATTRIBUTES ProcessAttr = null;
SECURITY_ATTRIBUTES ThreadAttr = null;
bool b = CreateProcess("D:\\notepad.exe", null, ProcessAttr, ThreadAttr, false, 32, 0, "D:\\", startUpInfo, ProcInf);
}
Код:
Спасибо. Пробовал ShellExecute - работает.
Цитата: lesovick
Спасибо. Пробовал ShellExecute - работает.
скажите, а у вас действительно блокнот лежит в корне диска D?
З.Ы. Для спасибо есть репутация. Для форматирования кода тег [ code ]. Помимо этого есть правила топика - которые читать обязательно.
А нотпад я временно на диск D ручками скопировал. Ну, просто мне так по некоторым причинам удобнее было его ислользовать для отладки этой проги.
Цитата: lesovick
А нотпад я временно на диск D ручками скопировал. Ну, просто мне так по некоторым причинам удобнее было его ислользовать для отладки этой проги.
Я собственно к тому, что ShellExecute работает немного по другому. В отличии от CreateProcess который не выполняет поиск в PATH ShellExecute это делает. Этот момент стоит учитывать - особенно если имеет значение какой исполнимый файл будет запущен. А что бы выяснить почему не запускается процесс через CreateProcess надо использовать GetLastError
Цитата: lesovick
byte[] startUpInfo = new byte[18];
startUpInfo[0] = 18 * sizeof(byte);
///////////////////
startUpInfo[1] = 0;
startUpInfo[2] = 0;
startUpInfo[3] = 0;
///////////////////
startUpInfo[4] = 0;
startUpInfo[5] = 0;
startUpInfo[6] = 0;
startUpInfo[7] = 0;
startUpInfo[8] = 0;
startUpInfo[9] = 0;
startUpInfo[10] = 0;
startUpInfo[11] = 1;
startUpInfo[12] = 0;
startUpInfo[13] = 0;
///////////////////////////////
startUpInfo[14] = 0;
///////////////////////////////
startUpInfo[15] = 0;
startUpInfo[16] = 0;
startUpInfo[17] = 0;
М-да... Индусы отдыхают...
Было бы смешно, если бы не было так печально....