#include <windows.h>
#include <tchar.h>
TCHAR GAppname[]=TEXT("AppRun");
TCHAR GCmdLine[2048];
const TCHAR* appCmdLine()
{
return GCmdLine;
}
//
// Get system error
//
const TCHAR* appGetSystemErrorMessage(int Error=0)
{
static TCHAR Msg[1024];
*Msg=0;
if(0==Error)
Error=GetLastError();
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, Error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), Msg, 1024, NULL);
if(wcschr(Msg,'\r'))
*wcschr(Msg,'\r')=0;
if(wcschr(Msg,'\n'))
*wcschr(Msg,'\n')=0;
return Msg;
}
const void appGetLastError(TCHAR* Str)
{
TCHAR Msg[4096]=TEXT("");
wsprintf(Msg, TEXT("s%\nGetLastError : %d\n\n%s"), Str, GetLastError(), appGetSystemErrorMessage());
MessageBox(NULL, Msg, TEXT("System Error"), MB_OK|MB_ICONSTOP|MB_SETFOREGROUND|MB_TOPMOST);
}
void* Spawn(const TCHAR* Parms)
{
TCHAR CommandLine[1024];
wsprintf(CommandLine, TEXT("%s"), Parms);
PROCESS_INFORMATION ProcInfo;
STARTUPINFO StartupInfo = {sizeof(STARTUPINFO), NULL, NULL, NULL, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, NULL, NULL, NULL, STARTF_FORCEOFFFEEDBACK, SW_SHOWNORMAL, NULL, NULL, NULL, NULL, NULL};
SECURITY_ATTRIBUTES Attr;
Attr.nLength=sizeof(SECURITY_ATTRIBUTES);
Attr.lpSecurityDescriptor=NULL;
Attr.bInheritHandle=TRUE;
if(!CreateProcess(NULL, CommandLine, &Attr, &Attr,TRUE, DETACHED_PROCESS|REALTIME_PRIORITY_CLASS, NULL, NULL, &StartupInfo, &ProcInfo)) {
HINSTANCE ShellExError=ShellExecute(NULL, TEXT("open"), CommandLine, NULL, NULL, StartupInfo.wShowWindow);
if(INT_PTR(ShellExError)<=32) {
return NULL;// Could not spawn process.
}
}
return (void*)ProcInfo.hProcess;// Process spawn!
}
void appInit(const TCHAR* InCmdLine)
{
if(*InCmdLine=='\"') {
++InCmdLine;
while(*InCmdLine && *InCmdLine!='\"')
++InCmdLine;
if(*InCmdLine)
++InCmdLine;
}
while(*InCmdLine && *InCmdLine!=' ')
++InCmdLine;
if(*InCmdLine)
++InCmdLine;
lstrcpy(GCmdLine, InCmdLine);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
const TCHAR* CmdLine=GetCommandLine();
appInit(CmdLine);
if(!lstrlen(GCmdLine)) {
MessageBox(HWND_DESKTOP, TEXT("Missing Command Line"), GAppname, MB_OK|MB_ICONSTOP|MB_SETFOREGROUND|MB_TOPMOST);
return EXIT_FAILURE;
}
TCHAR AppName[2048]=TEXT("");
wsprintf(AppName, TEXT("\"%s\""), GCmdLine);
if(!Spawn(AppName)) {
appGetLastError(TEXT("Could not CreateProcess:"));
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
Запускал по-разному, т.е. пример бат-файла:
AppRun D:\tools\edit\npp7_x64\notepad++.exe
После запуска, немного "думает" и выдает:
Сигнатура проблемы:
Имя события проблемы: APPCRASH
Имя приложения: AppRun.exe
Версия приложения: 0.0.0.0
Отметка времени приложения: 5ca5c2fb
Имя модуля с ошибкой: USER32.dll
Версия модуля с ошибкой: 6.1.7601.17514
Отметка времени модуля с ошибкой: 4ce7ba59
Код исключения: c0000005
Смещение исключения: 0003da5f
Версия ОС: 6.1.7601.2.1.0.256.1
Код языка: 1049
Дополнительные сведения 1: dddf
Дополнительные сведения 2: dddf54b75db0389a89feab5caacfb6e5
Дополнительные сведения 3: f392
Дополнительные сведения 4: f392d91e9d5c3d69d9462ea4584c7cac
Ознакомьтесь с заявлением о конфиденциальности в Интернете:
http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0419
Если заявление о конфиденциальности в Интернете недоступно, ознакомьтесь с его локальным вариантом:
C:\Windows\system32\ru-RU\erofflps.txt
Делал: sfc /scannow, но не удается исправить ошибки... Взял, переустановил Windows. Всё-равно, также...
Да. IDE: vс2008Так заработало:
TCHAR AppName[2048]=TEXT("");
/*wsprintf(AppName, TEXT("\"%s\""), GCmdLine);
*if(!Spawn(AppName)) {
* appGetLastError(TEXT("Could not CreateProcess:"));
* return EXIT_FAILURE;
}*/
lstrcpy(AppName, appCmdLine());
const TCHAR* ExeName=wcstok(AppName, TEXT(" "));
if(!Spawn(ExeName)) {
appGetLastError(TEXT("Could not CreateProcess:"));
return EXIT_FAILURE;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как на С++ будут выглядеть следующие строчки написанные на Python:
Дана квадратная матрица и число nЗаменить каждый элемент матрицы на среднее арифметическое элементов квадрата размера 2n+1 с центром в данном...
Хочу начать дебагинг проекта, написал простенькую тестовую функцию в классе которая взаимодействует с Windows APIКонечный компютер x86
У меня есть 2 дерева представленные такой структурой подскажите идею как их можно сравнить между собой,(данные хранятся только в листах)