Externes Programm starten
-
Hmmm...
bin ich mir nicht sicher,
habe einfach den Asistenten von VS 6.0 folge geleistet.
Und anschließend meinen Code hinzu gefügt.Ohne dem Markierten Beriech tut es ja.
Nur nicht mit besonderen Rechten..
GRuß
andy_mann
-
Also, ich habe es jetzt mal anders herum gemacht,
habe ein Projekt in Win32 Consolen Modus erstellt.
Habe nur den Source von vorigem Beispiel eingehängt:
/* Einbinden der Advapi32.lib nicht vergessen!!! */ #define _WIN32_WINNT 0x0500 #include <windows.h> #include <tchar.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { STARTUPINFO si; PROCESS_INFORMATION pi; memset(&si, 0, sizeof(si)); memset(&pi, 0, sizeof(pi)); si.cb = sizeof(si); WCHAR szCommandLine = _T("notepad.exe"); // Darf nicht const sein!!! if(!CreateProcessWithLogonW(_T("testaccount"), _T("."), _T("hallo"), LOGON_WITH_PROFILE, NULL, szCommandLine, NULL, NULL, NULL, &si, &pi)) // Der Punkt beim Parameter 2 bedeutet, das die lokale Benutzerdatenbank verwendet werden soll. { LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL ); MessageBox(NULL, (LPCTSTR)lpMsgBuf, NULL, MB_OK | MB_ICONEXCLAMATION); LocalFree(lpMsgBuf); // Bei Fehlermeldung: "Der angegebene Dienst kann nicht gestartet werden..." // überprüfe ob der Dienst "Sekundäre Anmeldung" aktiviert und gestartet ist! } CloseHandle(pi.hProcess); CloseHandle(pi.hThread); return 0; }
CreateProcessWithLogonW scheint er zu kennen, allerdings gibt es noch 2 Fehler:
error C2440: 'initializing' : 'char [12]' kann nicht in 'unsigned short' konvertiert werden
Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
D:\vcpp32\dieter\test\main.cpp(17) : error C2664: 'CreateProcessWithLogonW' : Konvertierung des Parameters 1 von 'char [12]' in 'const unsigned short *' nicht moeglich
Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder FunktionsformatMit der Meldung fange ich jetzt nichts an..
Kann mir jemand Helfen ??
Gruß
andy_mann
-
Wenn du einen Unicode-String brauchst kannst du einfach ein L davorsetzen - also so:
L"testaccount"
-
Hall,
also Danke Dir,
aber wohin ich auch das L setze, immer der selbe Fehler..Gruß
andy_mann
-
Dann scheinst du etwas falsch gemacht zu haben - zeig doch bitte nochmal deinen Code
-
Ich Danke DIr,
/* Einbinden der Advapi32.lib nicht vergessen!!! */ #define _WIN32_WINNT 0x0500 #include <windows.h> #include <tchar.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { STARTUPINFO si; PROCESS_INFORMATION pi; memset(&si, 0, sizeof(si)); memset(&pi, 0, sizeof(pi)); si.cb = sizeof(si); WCHAR szCommandLine = _T("notepad.exe"); // Darf nicht const sein!!! if(!CreateProcessWithLogonW(_T("testaccount"), _T("."), _T("hallo"), LOGON_WITH_PROFILE, NULL, szCommandLine, NULL, NULL, NULL, &si, &pi)) // Der Punkt beim Parameter 2 bedeutet, das die lokale Benutzerdatenbank verwendet werden soll. { LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL ); MessageBox(NULL, (LPCTSTR)lpMsgBuf, NULL, MB_OK | MB_ICONEXCLAMATION); LocalFree(lpMsgBuf); // Bei Fehlermeldung: "Der angegebene Dienst kann nicht gestartet werden..." // überprüfe ob der Dienst "Sekundäre Anmeldung" aktiviert und gestartet ist! } CloseHandle(pi.hProcess); CloseHandle(pi.hThread); return 0; }
Gruß
andy_mann
-
Dann mach daraus jetzt mal folgendes:
WCHAR szCommandLine = L"notepad.exe"; // Darf nicht const sein!!! if(!CreateProcessWithLogonW(L"testaccount", L".", L"hallo", LOGON_WITH_PROFILE, NULL, szCommandLine, NULL, NULL, NULL, &si, &pi)) [...]
-
MMhhhh..
Danke Dir,
aber was soll ich Dir SchreibenImmerhin sind es jetzt nur noch 2 Fehler.....
main.cpp(16) : error C2440: 'initializing' : 'unsigned short [12]' kann nicht in 'unsigned short' konvertiert werden
Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
main.cpp(17) : error C2664: 'CreateProcessWithLogonW' : Konvertierung des Parameters 6 von 'unsigned short' in 'unsigned short *' nicht moeglich
Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder FunktionsformatGruß
andy_mann
-
Hallo,
naja, dann korrigierst du die (hoffentlich) letzte falsche Zeile auch noch:
// darf nicht nur ein WCHAR sein, sondern ein WCHAR* !!! WCHAR szCommandLine[] = L"notepad.exe"; // Darf nicht const sein!!!
MfG
-
War mir vorhin gar nicht aufgefallen
-
Oooohhhh...
ich danke Dir,allerdings noch ein Fehler...
main.cpp(17) : error C2664: 'CreateProcessWithLogonW' : Konvertierung des Parameters 10 von 'struct _STARTUPINFOA *' in 'struct _STARTUPINFOW *' nicht moeglich
Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder FunktionsformatGruß
andy_mann
-
genau deswegen ist es sinnvoll, doch mit UNICODE zu kompilieren, aber wenn wir schon soweit sind: auch die STARTUPINFO-Struktur muß dann in der UNICODE-Version deklariert werden:
STARTUPINFOW si;
aber jetzt...(vielleicht ist es auch sinnvoll, die STARTUPINFOW wenigstens in einigen Positionen zu besetzen)
MfG
-
Hallo,
das ist mir jetzt ja schon peinlich....
ist nicht so, dass ich noch nie was gemacht habe....aber bei diesem Source ???????????????????????????????????
Kompilieren geht durch, 0 Fehler...
Linker:LIBCD.lib(crt0.obj) : error LNK2001: Nichtaufgeloestes externes Symbol _main
Debug/test.exe : fatal error LNK1120: 1 unaufgeloeste externe VerweiseGRuß
andy_mann
-
Dann hast du offenbar am Anfang ausgewählt, dass du eine Konsolen-Anwendung erstellen willst - du brauchst aber eine Win32-Anwendung
-
ich habe am anfang mal nach gefragt, wie man so ein Ding wie ich vor habe macht.
Darauf wurde mir CreateProcessWithLogonW vorgeschlagen.
Ich brauche allerdings auch keine Oberfläche, sondern nur beienem bestimmten zustand ein kleinen Windows Meldungs Dialog, ohne Bestätigung... (ja/nein)
Gruß
andy_mann
-
Du musst ja in deiner Win32-Anwendung kein Fenster erstellen
-
Ne, aber ein Dialog.
Und da habe ich Probleme bekommen....
Gruß
andy_mann
-
Inwiefern? Andersrum hätte ich mir das ja noch vorstellen könnmen
-
konnte die Messagebox nicht wieder von alleine schließen lassen...
-
Und inwiefern hast du dieses Problem mit einer Konsolenanwendung nicht mehr