программа не работает после открытия с помощью ShellExecute - PullRequest
0 голосов
/ 16 февраля 2019

РЕДАКТИРОВАТЬ: Оказывается, проблема в том, что в iosfwd выдает исключение в строке 506:

Исключение: нарушение прав записи._Left был 0xCCCCCCCC.

Чтобы ответить: Как исправить: Возникло исключение: нарушение прав записи._Left был 0xCCCCCCCC


Я делаю программу, в которой она запускает другую программу в том же каталоге, которая обновляет текстовый файл с помощью ShellExecute.

Программа начинается с получения строкииспользуя getline, а затем использует ShellExecute для запуска другой программы, которая использует fstream для обновления файла.Вот соответствующая часть программы:

        cout << "Please enter Program Name:" << endl;
        getline(cin.ignore(), a);
        system("cls");
        os.open("tempstring.txt");
        os << a;
        os.close();
        LPCSTR filename = "NewProgScript.exe";
        LPCSTR Location = NULL;
        ShellExecute(NULL, "open", filename, NULL, Location, SW_SHOWNORMAL);

        /*>> >> >> >> >> rest is irrelevant << << << << << <<*/

        bool end = false;
        do
        {
            system("cls");
            is.open("tempdone.txt");
            is >> x;
            is.close();
            if (x == 1) { end = true; }
            if (x == 2) { os.open("tempdone.txt"); os << 0; os.close(); Errors Err; Err.Error(41); }
            cout << "Please wait while Files Update." << endl;
            Sleep(1000);
        } while (end == false);

"NewProgScript.exe" запускается здесь.NewProgScript.exe код:

#include "pch.h"
#include <fstream>
#include <string>
#include <Windows.h>
#include <iostream>
using namespace std;

int main()
{
ofstream os;
ifstream is;
string a, nouse;
string Progs[20];
is.open("tempstring.txt");
getline(is, nouse);
is.close();
cout << "UPDATING DATABASE.. DO NOT EXIT!" << endl;
string name, ending, end;
ending = ".txt";
name = "Prog";
for (int count = 1; count < 20 + 1; count++)
{
    end = name + to_string(count) + ending;
    is.open(end);
    getline(is, Progs[count]);
    is.close();
}

for (int count = 1; count < 20 + 1; count++)
{
    end = name + to_string(count) + ending;
    if (Progs[count] == "NULL")
    {
        os.open("end");
        os << nouse;
        os.close();

        os.open("tempdone.txt");
        os << 1;
        os.close();
        Sleep(500);
        exit(EXIT_SUCCESS);
    }
}

os.open("tempdone.txt");
os << 2;
os.close();
}

Проблема заключается в том, что когда этот модуль запуска запускается на ранних этапах использования ShellExecute, он не обновляет файл "tempdone.txt". Однако он работает, когда я вручную нажимаю на кнопку открыть егоexternaly.Как я могу это исправить?

PS: извините за очень длинный пост!Также мне жаль, что я делаю глупые или наивные ошибки, я еще не очень хорош: /

...