Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > CreateProcess


Автор: killcode 16.11.2011, 18:39
Считывает имена процессов из файла, но не запускает, возникает ошибка о неправильном пути файла. Пробовал использовать так:_tczcpy(buff,TEXT(n)); тоже самое. Имена файлов заданы правильно: C:\\app1.exe  Подскажите плиз, лаба горит)
Код

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int mkproc(char *n){
    STARTUPINFO atr;
    PROCESS_INFORMATION inf;
    ZeroMemory(&atr,sizeof(atr));
    atr.cb=sizeof(atr);
    ZeroMemory(&inf,sizeof(inf));
    if(!CreateProcess((LPCWSTR)n,NULL,NULL,NULL,FALSE,0,NULL,NULL,&atr,&inf)){
        printf("CreateProcess failed (%d)\n",GetLastError());
        return 1;
    }
    return 0;

int main(){
    string line;
    ifstream myfile ("config.ini");
    if (myfile.is_open())
    {
        while ( myfile.good() )
        {
            getline (myfile,line);
            cout<<line<<" ";
            const char *s=line.c_str();
            mkproc((char*)s);
        }
    myfile.close();
  }
}

Автор: vol4ek 16.11.2011, 19:17

покажи как читаешь файл.

Автор: Estranged 16.11.2011, 21:37
Facepalm

    string line; <------
int mkproc(char *n){ <--------
if(!CreateProcess((LPCWSTR)n,NULL,NULL,NULL,FALSE,0,NULL,NULL,&atr,&inf)){ <-----

Почитайте, что за код http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382%28v=vs.85%29.aspx

И проверьте этот код (вставьте одну строку: LPCWSTR lp = (LPCWSTR)n;), в отладчике поглядите на строку lp. Красивая строка? Система ищет как раз вот это имя.

Код

int mkproc(char *n){
    STARTUPINFO atr;
    PROCESS_INFORMATION inf;
    ZeroMemory(&atr,sizeof(atr));
    atr.cb=sizeof(atr);
    ZeroMemory(&inf,sizeof(inf));
    LPCWSTR lp = (LPCWSTR)n;
    if(!CreateProcess((LPCWSTR)n,NULL,NULL,NULL,FALSE,0,NULL,NULL,&atr,&inf)){
        printf("CreateProcess failed (%d)\n",GetLastError());
        return 1;
    }
    return 0;


Автор: bass 16.11.2011, 22:14
так сначала попробуй...
CreateProcess("C:\\app1.exe",NULL,NULL,NULL,FALSE,0,NULL,NULL,&atr,&inf)
Если так запустит то смотри функцию работы со строками..... Лучше в отладчике....
Если нет то смотри что с C:\\app1.exe может для работы какой то длл не хватает и приложение падает....

Автор: volatile 16.11.2011, 23:19
Цитата(killcode @  16.11.2011,  18:39 Найти цитируемый пост)
mkproc(char *n){

Цитата(killcode @  16.11.2011,  18:39 Найти цитируемый пост)
(!CreateProcess((LPCWSTR)n,


Здесь же явно - несоотвествие юникодного проекта, и ансишного файла. От такого приведения, строка юникодной не станет.

Проект нужно делать не юникодным, и убирать приведения.


Автор: killcode 17.11.2011, 18:08
Всем спасибо, разобрался!

Автор: Dem_max 18.11.2011, 11:42
Код

(LPCWSTR)n

Никогда не нужно делать такого глупого приведения

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)