Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
1 / 1 / 0
Регистрация: 16.11.2010
Сообщений: 3

Загадочная прoблема запуска стороннего процесса, читающего/создающего файл

16.11.2010, 19:50. Показов 1588. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые!
Столкнулся с неизведанной проблемой, прошу вашей помощи.
Итак, нужно запустить из моего приложения (пишу на visual studio c++ winforms 2010) следующую консольную программу, скомпилированную в devC++:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <conio.h>
#include <fstream>
#include <cstring>
#include <stdio.h>
 
using namespace std;
 
int main() 
{        
    FILE *fp1;
 
   fp1 = fopen("test.txt", "rb");
   
   fclose(fp1);
 
    return 0;
}
При запуске данной программы через функцию CreateProcess(L"e:\\program.exe",NULL, NULL,NULL,FALSE,NULL,NULL,NULL,&cif,&pi) ; вылетает ошибка, с просьбой отправить отчет.

Думая, что проблема в функции - использовал альтернативные функции (Process::Start, WinExec) и компиляторы (delphi7 функция WinExec). Но результат тот же: при запуске программы через приложение программа срабатывает с ошибкой. Причем программа, которую я пытаюсь запустить довольно безобидная и из системы запускается-выполняется нормально.

Возможно, что проблема в том, что нельзя запускать процесс, который работает с файлами через приложение, больше идей на эту тему нет.

А как вы думаете?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.11.2010, 19:50
Ответы с готовыми решениями:

Чтение из памяти стороннего процесса и запись в файл массива типа doouble
Здравствуйте. Помогите кто может) В общем надо написать прогу которая будет читать мой массив из Visual Studio 2010 во время отладки (то...

Имеется компьютер с W7, грузится только в безопасном режиме. Аппаратная прoблема или прoблема системы?
В safe mode с поддержкой сети тоже грузится. В обычном режиме даже до окна логона не доходит. Тестировал утилитами avz, касперским, sfc...

Пакетный файл для создания другого пакетного файла, создающего в свою очередь текстовый файл
В университете какое-то сложное задание дали, не могу справиться, уже двое суток голову ломаю. Создайте файл создания отчетов о...

6
63 / 11 / 1
Регистрация: 15.11.2010
Сообщений: 29
16.11.2010, 22:39
Выложи код программы, которая запускает данную.
0
 Аватар для Manjak
270 / 176 / 46
Регистрация: 12.03.2010
Сообщений: 494
16.11.2010, 23:55
Текст ошибки выложи
0
63 / 11 / 1
Регистрация: 15.11.2010
Сообщений: 29
16.11.2010, 23:57
Маньяк читай МСДН и не путай людей. Ошибка я догадываюсь в чем, но нужен вышеуказанный мною код.
0
1 / 1 / 0
Регистрация: 16.11.2010
Сообщений: 3
17.11.2010, 09:12  [ТС]
Итак, вот полный код приложения:
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <Windows.h>
#include <iostream>
 
#pragma once
 
namespace открытиедругойпрограммы {
 
    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
 
    /// <summary>
    /// Сводка для Form1
    /// </summary>
    public ref class Form1 : public System::Windows::Forms::Form
    {
    public:
        Form1(void)
        {
            InitializeComponent();
            //
            //TODO: добавьте код конструктора
            //
        }
 
    protected:
        /// <summary>
        /// Освободить все используемые ресурсы.
        /// </summary>
        ~Form1()
        {
            if (components)
            {
                delete components;
            }
        }
    private: System::Windows::Forms::Button^  button1;
 
 
    protected: 
 
    private:
        /// <summary>
        /// Требуется переменная конструктора.
        /// </summary>
        System::ComponentModel::Container ^components;
 
#pragma region Windows Form Designer generated code
        /// <summary>
        /// Обязательный метод для поддержки конструктора - не изменяйте
        /// содержимое данного метода при помощи редактора кода.
        /// </summary>
        void InitializeComponent(void)
        {
            this->button1 = (gcnew System::Windows::Forms::Button());
            this->SuspendLayout();
            // 
            // button1
            // 
            this->button1->Location = System::Drawing::Point(110, 101);
            this->button1->Name = L"button1";
            this->button1->Size = System::Drawing::Size(116, 23);
            this->button1->TabIndex = 0;
            this->button1->Text = L"Ok";
            this->button1->UseVisualStyleBackColor = true;
            this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
            // 
            // Form1
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(292, 266);
            this->Controls->Add(this->button1);
            this->Name = L"Form1";
            this->Text = L"Form1";
            this->ResumeLayout(false);
 
        }
#pragma endregion
 
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
{
    STARTUPINFO cif;
    ZeroMemory(&cif,sizeof(STARTUPINFO));
    PROCESS_INFORMATION pi;
 
           //!!!при запуске этой программы и возникает ошибка
    CreateProcess(L"C:\\prog.exe",
        NULL,
        NULL,NULL,FALSE,NULL,NULL,NULL,&cif,&pi);
}
         
    };
}
А вот код программы, которую запускает главное приложение. В вышепредставленном коде это C:\\prog.exe:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <conio.h>
#include <fstream>
#include <cstring>
#include <stdio.h>
 
using namespace std;
 
int main() 
{        
    FILE *fp1;
 
   //безобидное чтение файла
   fp1 = fopen("test.txt", "rb");
   
   fclose(fp1);
 
    return 0;
}
Причем запускать другие программы с помощью функции CreateProcess получается без проблем, будь это хоть блокнот, хоть своя программа, не работающая с файлами.

Возникающая ошибка:
"prog.exe - обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства."
Ее текст:
AppName: prog.exe AppVer: 0.0.0.0 ModName: msvcrt.dll
ModVer: 7.0.2600.5512 Offset: 00030ac4
Но я почему то думаю что не в этом месте следует искать недочет.

С нетерпением жду ответа DiakonX'a, который кажется знает в чем дело.
0
63 / 11 / 1
Регистрация: 15.11.2010
Сообщений: 29
17.11.2010, 18:43
Первое.
STURTUPINFO имеет элемент структуры как
DWORD cb;

который должен быть заполнен.

cif.cb = sizeof(STURTUPINFO);

Второе. Prog.exe запускается вообще не через другой процесс?
1
 Аватар для _Lamer
9 / 9 / 1
Регистрация: 16.11.2010
Сообщений: 33
17.11.2010, 20:38
Цитата Сообщение от DiakonX Посмотреть сообщение
Первое.
STURTUPINFO имеет элемент структуры как
DWORD cb;

который должен быть заполнен.

cif.cb = sizeof(STURTUPINFO);
DiakonX правильно сказал.

и еще проинициализируй pi
C++
1
ZeroMemory(&pi,sizeof(PROCESS_INFORMATION));
так надежней будет.

Цитата Сообщение от Gamon Посмотреть сообщение
C++
1
2
3
    CreateProcess(L"C:\\prog.exe",
        NULL,
        NULL,NULL,FALSE,NULL,NULL,NULL,&cif,&pi);
вообще CreateProcess лучше использовать так
C++
1
2
3
    CreateProcess(NULL,
        L"C:\\prog.exe", // полная коммандная строка
        NULL,NULL,FALSE,NULL,NULL,NULL,&cif,&pi);
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.11.2010, 20:38
Помогаю со студенческими работами здесь

Закрытие стороннего процесса
Всем привет. У меня возникла проблема мне нужно закрыть сторонний процесс.Пока я понял только как закрыть процесс по названию например:...

Завершение стороннего процесса
Нужна помощь!!! как завершить какой либо процесс в Windows'e при нажатии кнопки на форме прошу ответ более подробно я новичок еще.:) ...

Запуск стороннего процесса
Здравствуйте , нужна помощь в работе с формами в VS 2012 . Мною была написана игра через OpenGL и хотелось бы к этой игре создать меню....

Завершение стороннего процесса
День добрый. Возможно ли из программы завершить другую программу? Т.е. при нажатии на кнопку моей программы завершаем работу...

Запрет запуска стороннего приложения
Всем привет. Есть мое приложение и есть приложение AutoCad. При открытом AutoCad сделать запрет на запуск моего приложения не сложно -...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru