122 / 85 / 2
Регистрация: 17.10.2010
Сообщений: 436
1

Запуск bat файла или команды в CMD, не выходит

03.11.2010, 13:28. Показов 3630. Ответов 3
Метки нет (Все метки)

Нужно настроить маршрутизацию, пробовал создавать bat файл, а потом его запускать.
Файл создается как надо, а вот запускаться не хочет...
Пробовал через функцию system, выполнять по строкам, таже ерунда

Может из-за компилятора, я его настроил для переносимости на другие компы (Release и тд...)
Вот пример запуска через system
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
    
    AnsiString st1;
    AnsiString st2;
 
    int a1, a2, a3;
 
 
    WORD wVersionRequested;
    WSADATA wsaData;
    wVersionRequested = MAKEWORD(1, 0);
    int err = WSAStartup(wVersionRequested, &wsaData);
    if(err == 0)
    {
        char hn[1024];
        struct hostent *adr;
        if(gethostname((char *)&hn, 1024))
        {
            int err = WSAGetLastError();
            Beep();
        };
        adr = gethostbyname(hn);
        if(adr)
        {
          a1 = (unsigned char)adr->h_addr_list[0][0];
          a2 = (unsigned char)adr->h_addr_list[0][1];
          a3 = (unsigned char)adr->h_addr_list[0][2];
 
        }
    }
    st1 = "route -p add 10.0.0.0 mask 255.0.0.0 ";
    st1 = st1 + IntToStr( a1 ) + ".";
    st1 = st1 + IntToStr( a2 ) + ".";
    st1 = st1 + IntToStr( a3 ) + ".1" + "\n";
    st2 = "route -p add 172.16.0.0 mask 255.240.0.0 ";
    st2 = st2 + IntToStr( a1 ) + ".";
    st2 = st2 + IntToStr( a2 ) + ".";
    st2 = st2 + IntToStr( a3 ) + ".1 \n";
    system(st1.c_str());
    system(st2.c_str());
Вот запуск через создание файла и затем для запуска создание процесса
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
    TStartupInfo si;
    TProcessInformation pi;
    AnsiString cmdline;
 
    int f;
    AnsiString st;
    
 
    int a1, a2, a3;
 
 
    WORD wVersionRequested;
    WSADATA wsaData;
    wVersionRequested = MAKEWORD(1, 0);
    int err = WSAStartup(wVersionRequested, &wsaData);
    if(err == 0)
    {
        char hn[1024];
        struct hostent *adr;
        if(gethostname((char *)&hn, 1024))
        {
            int err = WSAGetLastError();
            Beep();
        };
        adr = gethostbyname(hn);
        if(adr)
        {
          a1 = (unsigned char)adr->h_addr_list[0][0];
          a2 = (unsigned char)adr->h_addr_list[0][1];
          a3 = (unsigned char)adr->h_addr_list[0][2];
 
        }
    }
    
    st = "route -p add 10.0.0.0 mask 255.0.0.0 ";
    st = st + IntToStr( a1 ) + ".";
    st = st + IntToStr( a2 ) + ".";
    st = st + IntToStr( a3 ) + ".1" + "\n";
    st = st + "route -p add 172.16.0.0 mask 255.240.0.0 ";
    st = st + IntToStr( a1 ) + ".";
    st = st + IntToStr( a2 ) + ".";
    st = st + IntToStr( a3 ) + ".1 \n";
    st = st + "@echo ssdddddddd \n";
    st = st + "@pause";                
 
    f = FileCreate("C:\\sss.bat");
 
    FileWrite(f,st.c_str(),st.Length());
    FileClose(f);   
 
 
    ZeroMemory(&si,sizeof (si)); si.cb = sizeof(si);
    cmdline = "C:\\sss.bat"; // запускаем эту программу
    if (!CreateProcess( NULL, // No module name (use command line).
    cmdline.c_str(), // Command line.
    NULL, // Process handle not inheritable.
    NULL, // Thread handle not inheritable.
    false, // Set handle inheritance to FALSE.
    0, // No creation flags.
    NULL, // Use parent's environment block.
    NULL, // Use parent's starting directory.
    &si,  // Pointer to STARTUPINFO structure.
    &pi  )) // Pointer to PROCESS_INFORMATION structure.
    {
    ShowMessage("CreateProcess failed."); }
Добавлено через 1 минуту
После запуска выводит содержимое @echo
и просит для продолжения нажать любую клавишу....
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2010, 13:28
Ответы с готовыми решениями:

Запуск cmd из bat-файла c другим приглашением
Доброго времени суток. Я пытаюсь создать bat-файл, при помощи которого я мог бы открывать командную...

Запуск .bat файла и вывод текста из cmd окна
Доброго времени суток! Возник такой вопрос: 1. Как запустить .bat файл, а потом в delphi,...

Возможно написать bat\cmd для команды ping ?
Помогите ли написать BAT\CMD c командной ping -a для диапазона ip адресов от 10.77.13.1 до...

Запуск cmd файла с определенного места в его коде из другого cmd файла
Здравствуйте. Требуется команда для запуска батника с метки внутри него, а не с первой команды в...

3
122 / 85 / 2
Регистрация: 17.10.2010
Сообщений: 436
03.11.2010, 15:25  [ТС] 2
Пробывал и через
WinExec("C:\\sss.bat ",SW_SHOW);

ShellExecute(Handle,"open","C:\\sss.bat",NULL,NULL,SW_SHOW);

Всегда выдает
Миниатюры
Запуск bat файла или команды в CMD, не выходит  
0
122 / 85 / 2
Регистрация: 17.10.2010
Сообщений: 436
04.11.2010, 17:50  [ТС] 3
Добавлено через 23 часа 51 минуту
А на тех компах где установлен, надо было добавить в bat файл первой строчкой

cd /D \"%~p0\"

и все заработало...
0
122 / 85 / 2
Регистрация: 17.10.2010
Сообщений: 436
05.11.2010, 15:14  [ТС] 4
В ХР все отлично работает, а вот в 7 не хочет даже создавать файл...
Вот несколько вариантов, помогите подправить или нужно совсем по-другому подходить?!?!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
void __fastcall TForm1::N6Click(TObject *Sender)
{
    TStartupInfo si;
    TProcessInformation pi;
    AnsiString cmdline;
 
    int f;
    AnsiString st;
    
    int a1, a2, a3;
 
 
    WORD wVersionRequested;
    WSADATA wsaData;
    wVersionRequested = MAKEWORD(1, 0);
    int err = WSAStartup(wVersionRequested, &wsaData);
    if(err == 0)
    {
        char hn[1024];
        struct hostent *adr;
        if(gethostname((char *)&hn, 1024))
        {
            int err = WSAGetLastError();
            Beep();
        };
        adr = gethostbyname(hn);
        if(adr)
        {
          a1 = (unsigned char)adr->h_addr_list[0][0];
          a2 = (unsigned char)adr->h_addr_list[0][1];
          a3 = (unsigned char)adr->h_addr_list[0][2];
 
        }
    }
 
    st = "cd /D \"%~p0\" \n";
    st = "route -p add 10.0.0.0 mask 255.0.0.0 ";
    st = st + IntToStr( a1 ) + ".";
    st = st + IntToStr( a2 ) + ".";
    st = st + IntToStr( a3 ) + ".1" + "\n";
    st = st + "route -p add 172.16.0.0 mask 255.240.0.0 ";
    st = st + IntToStr( a1 ) + ".";
    st = st + IntToStr( a2 ) + ".";
    st = st + IntToStr( a3 ) + ".1 \n";
    st = st + "@echo ssdddddddd \n";
    st = st + "@pause";
 
    f = FileCreate("C:\\sss.bat");
 
    FileWrite(f,st.c_str(),st.Length());
    FileClose(f);
 
    ZeroMemory(&si,sizeof (si)); si.cb = sizeof(si);
        cmdline = "C:\\sss.bat"; // caioneaai yoo i?ia?aiio
        if (!CreateProcess( NULL, // No module name (use command line).
        cmdline.c_str(), // Command line.
        NULL, // Process handle not inheritable.
        NULL, // Thread handle not inheritable.
        false, // Set handle inheritance to FALSE.
        0, // No creation flags.
        NULL, // Use parent's environment block.
        NULL, // Use parent's starting directory.
        &si,  // Pointer to STARTUPINFO structure.
        &pi  )) // Pointer to PROCESS_INFORMATION structure.
        {
        ShowMessage("CreateProcess failed."); }
            
       
}
Следующий вариант:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
void __fastcall TForm1::N6Click(TObject *Sender)
{
    
    int f;
    AnsiString st;
   
    int a1, a2, a3;
 
 
    WORD wVersionRequested;
    WSADATA wsaData;
    wVersionRequested = MAKEWORD(1, 0);
    int err = WSAStartup(wVersionRequested, &wsaData);
    if(err == 0)
    {
        char hn[1024];
        struct hostent *adr;
        if(gethostname((char *)&hn, 1024))
        {
            int err = WSAGetLastError();
            Beep();
        };
        adr = gethostbyname(hn);
        if(adr)
        {
          a1 = (unsigned char)adr->h_addr_list[0][0];
          a2 = (unsigned char)adr->h_addr_list[0][1];
          a3 = (unsigned char)adr->h_addr_list[0][2];
 
        }
    }
 
    st = "cd /D \"%~p0\" \n";
    st = "route -p add 10.0.0.0 mask 255.0.0.0 ";
    st = st + IntToStr( a1 ) + ".";
    st = st + IntToStr( a2 ) + ".";
    st = st + IntToStr( a3 ) + ".1" + "\n";
    st = st + "route -p add 172.16.0.0 mask 255.240.0.0 ";
    st = st + IntToStr( a1 ) + ".";
    st = st + IntToStr( a2 ) + ".";
    st = st + IntToStr( a3 ) + ".1 \n";
    st = st + "@echo ssdddddddd \n";
    st = st + "@pause";
 
    f = FileCreate("C:\\sss.bat");
 
    FileWrite(f,st.c_str(),st.Length());
    FileClose(f);
 
   
    ShellExecute(Handle, "open", "C:\\sss.bat", NULL, NULL, SW_SHOW);
    
    //WinExec("C:\\sss.bat",SW_SHOW);   //С WinExec тот же эффект
   
   system("pause");
    
}
Даже файл создавать не хочет
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.11.2010, 15:14
Помогаю со студенческими работами здесь

Запуск команды cmd из программы C++
Привет, как можно исполнить код командной строки из программы ? желательно чтоб окно командной...

Запуск cmd и выполнение команды макросом
Доброго дня! Подскажите, пожалуйста, как запустить макросом из excel командную строку и...

Запуск консоли cmd с передачей в нее команды
товарищи ,подскажите пожалуйста (желательно код) ,как мне вызвать cmd .Т.е запускается программа и...

Запуск файла в директории с .bat, когда .bat запущен от имени администратора
Здравствуйте. Имею бат, он должен запускать файл "<тут директория батника>\n1.bat". Но если даже...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru