Keine Ahnung ob ich jetzt alles Richtig verstanden habe.
Ich würde
lpCurrentDirectory auf NULL belassen.
Du kannst einfach den Pfad + Anwendungsname in
lpCommandLine packen.
So habe ich es auch gemacht.
PHP Code:
TCHAR cDic[BUFSIZE];
CString strFilename;
strFilename.Format(_T("S4Client.exe"));
GetCurrentDirectoryW(BUFSIZE,cDic);
CString sDic = CString(cDic);
sDic.Format(_T("%s\\%s -rc:eu -lac:ger -auth_server_ip:217.110.102.94"),cDic,strFilename);
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
LPTSTR szCmdline = sDic.GetBuffer(0);
if (CreateProcess(NULL,szCmdline,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi) != false) {
sDic.ReleaseBuffer();
}else {
AfxMessageBox(_T("File not Found!"));
m_browse();
}
Das sollte auch mit dem Pfad funktionieren den du aus der Registry ziehst.
Weil bei mir ruft der auch falls, der Launcher sich nicht direkt im Verzeichnis befindet die m_browse() auf, wo so ein
"Browse" Fenster kommt und man dann einfach die S4Client auswählen kann.
Hier mal die m_browse() (ich weiß dass der code rendundant ist und mies, aber war nur für einen kleinen test launcher :P )
PHP Code:
void CS4LauncherDlg::m_browse(void)
{
CString m_strFileName;
CString m_strFilePath;
CString sDic;
CFileDialog l_SampleDlg(TRUE,NULL,NULL,OFN_OVERWRITEPROMPT | OFN_ENABLESIZING,_T("Executeable file (*.exe)|*.exe| All Files (*.*)|*.*||"));
int iRet = l_SampleDlg.DoModal();
m_strFilePath = l_SampleDlg.GetPathName();
m_strFileName = l_SampleDlg.GetFileName();
if(iRet == IDOK){
sDic.Format(_T("%s -rc:eu -lac:ger -auth_server_ip:217.110.102.94"),m_strFilePath);
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
//AfxMessageBox(sDic);
LPTSTR szCmdline = sDic.GetBuffer(0);
if (CreateProcess(NULL,szCmdline,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi) != false) {
sDic.ReleaseBuffer();
}else {
AfxMessageBox(_T("Error"));
}
}else if ( iRet != IDCANCEL){
AfxMessageBox(_T("No File Selected!"));
}
}