2010-08-01 2 views
0

У меня есть код python ... но как это сделать в C++? У меня нет большого опыта работы с C++. Я хочу сделать exe, который будет помещен как автозапуск в cd. Он должен открыть файл application.ini в моем компакт-диске с помощью xulrunner.exe в моем компакт-диске. Поскольку путь будет изменяться в каждом компьютере, я должен сделать что-то подобное.открытие exe из текущего каталога C++

import subprocess 
import os 
path= os.getcwd() 
final = path + '/xulrunner.exe ' + path + '/application.ini' 
print final 
os.system('final') 
subprocess.call(['C:\\Temp\\a b c\\Notepad.exe']) 

ответ

1

os.system() является system(), в Win32 getcwd() является GetCurrentDirectory()

http://msdn.microsoft.com/en-us/library/aa364934(VS.85).aspx

Вероятно, следует придерживаться обугливается буферов для строк. Так, что-то вроде (не проверялось, подследственных)

#include <stdio.h> 

int main(int ac, char **av) { 
    char path[MAX_PATH+1]; 
    GetCurrentDirectory(MAX_PATH, path); 
    char final[MAX_PATH * 2 + 100]; 
    sprintf(final, "%s /xulrunner.exe %s/application.ini", path, path); 
    printf("%s", final); 
    system(final); 
    // not sure what the notepad call is for, probably another system call 
    return 0; 
} 
+0

test.cpp: В функции 'INT основной (INT, символ **)': test.cpp: 3: ошибка: конфликтующие декларация 'INT ас' тест .cpp: 3: ошибка: «ac» имеет предыдущее объявление как «char ** ac» test.cpp: 3: ошибка: объявление 'int ac ' test.cpp: 3: ошибка: конфликты с предыдущей декларацией' char ** ac ' test.cpp: 4: ошибка: 'MAX_PATH' не была объявлена ​​в этой области test.cpp: 5: ошибка:« путь »не был объявлен в этой области test.cpp: 5: ошибка: 'GetCurrentDirectory 'не был объявлен в этой области test.cpp: 7: ошибка:' final' не был объявлен в этой области test.cpp: 9: ошибка: 'system 'не была объявлена ​​в этой области – esafwan

+0

, что могло быть причиной ошибки? – esafwan

+0

Я не вводил это в редактор или не пытался скомпилировать - вам нужно знать * some * C++, чтобы заставить его работать. Я исправил ac/av в основном. попробуйте MAXPATH или просто поместите там большое количество. try #include --- Я просто пытался вас начать. –

1

Я не совсем уверен, что я понимаю, о чем вы просите, но вам может понадобиться функция «система». Это вызовет командный процессор платформы для выполнения данной команды.

Если все ваши файлы (xulrunner.exe и application.ini) находятся в том же каталоге, что и исполняемый файл автозапуска, вы должны просто полагаться на правильную рабочую директорию и не нуждаться в полной дорожка.

Например:

system("xulrunner.exe application.ini"); 
1

Это зависит от платформы, вы реализуете его, но на Windows (в предположении, из C: \ вот где вы), вы должны будете погружаться в Windows API и используйте CreateProcess. В Linux это будет система или popen (там не очень хорошо знакомо).

http://msdn.microsoft.com/en-us/library/ms682425%28VS.85%29.aspx

Если EXE вы работаете, как известно, в текущем рабочем каталоге (там, где ваша программа запускается с), вы можете просто использовать имя файла («xulrunner.exe») в качестве имени , Вы можете быть более безопасным с помощью «. \ Xulrunner.exe», но это больше предпочтение. Вы также можете указать подкаталог или даже SetCurrentDirectory для перехода в другой каталог.

BOOL startedProgram = CreateProcess("xulrunner.exe", "application.ini", [fill in other options as you need]); 
Смежные вопросы