Pobieranie nazwy własnego programu
Ostatnio zmodyfikowano 2013-05-09 11:17
Raptiler Temat założony przez niniejszego użytkownika |
Pobieranie nazwy własnego programu » 2013-05-09 08:20:18 Siema, tak jak w temacie znacie może jakąś funkcje która pozwoli na pobranie nazwy programu? Czyli np:
Mój program ma nazwę GeoCalc.exe i chciałbym pobrać tą nazwe do zmiennej string/char obojętnie, ale jeżeli by ktoś zmienił nazwe na Kalkulator Geodezyjny.exe to wtedy chciałbym aby do tej zmiennej trafiła nazwa Kalkulator Geodezyjny.exe :p
Da rade ;)? |
|
pekfos |
» 2013-05-09 08:54:52 Masz to w argv[ 0 ] : int main( int argc, char ** argv ) { } |
|
Raptiler Temat założony przez niniejszego użytkownika |
» 2013-05-09 09:22:08 Niby prosta funkcja main, a jakos nigdy na jej parametry nie zwróciłem uwagi. Dzięki! |
|
Elaine |
» 2013-05-09 11:17:30 Masz to w argv[ 0 ] :
int main( int argc, char ** argv ) { } |
Ani standard C++, ani Windows, ani POSIX tego nie gwarantują. W przypadku wywołania w rodzaju: execl( "foo", "foo.file", static_cast < const char *>( nullptr ) );
wchar_t commandLine[] = L"foo.file"; STARTUPINFOW startupInfo { }; startupInfo.cb = static_cast < DWORD >( sizeof( startupInfo ) ); PROCESS_INFORMATION processInfo; CreateProcessW( L"foo.exe", commandLine, nullptr, nullptr, FALSE, 0, nullptr, nullptr, & startupInfo, & processInfo );
argv[0] to będzie "foo.file", nie nazwa programu. Przy odpowiednio szczęśliwych warunkach można w ten sposób spowodować eskalację uprawnień. Nie ma dobrego przenośnego sposobu na pobranie nazwy programu. Pod Windowsem można użyć GetModuleFileName, pod Linuksem odczytać cel symlinku /proc/self/exe, Solaris ma getexecname, Mac OS X: _NSGetExecutablePath, w przypadku FreeBSD do tego służy sysctl z argumentami {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1}, ale niestety nie istnieje nic ustandaryzowanego w POSIX. |
|
« 1 » |