Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Pobieranie nazwy własnego programu

Ostatnio zmodyfikowano 2013-05-09 11:17
Autor Wiadomość
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 ;)?
P-82504
pekfos
» 2013-05-09 08:54:52
Masz to w
argv[ 0 ]
:

C/C++
int main( int argc, char ** argv )
{ }
P-82506
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!
P-82507
Elaine
» 2013-05-09 11:17:30
Masz to w
argv[ 0 ]
:

C/C++
int main( int argc, char ** argv )
{ }
Ani standard C++, ani Windows, ani POSIX tego nie gwarantują.

W przypadku wywołania w rodzaju:
C/C++
// POSIX:
execl( "foo", "foo.file", static_cast < const char *>( nullptr ) );
// Windows:
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.
P-82513
« 1 »
  Strona 1 z 1