У меня есть программа, которая имеет двоичные файлы для многих разных ОС
Мне нужно, чтобы получить местоположение двоичного файла (думаю, автообновление)
Как это сделать в «вашей» ОС?
(Думайте об этом как о проблеме, своего рода :))
РЕДАКТИРОВАТЬ Примечание. Программа может быть переносной (запускать с флэш-накопителя и т. Д.) Или быть установлена (например, изначально в формате .deb).
EDIT2: вот что у меня уже есть:
/**
* Get the location of the executable
* @return the location of the executable, as a string.
*/
const char *GetExecutableLocation()
{
const char *path;
char buf[1024];
#if defined (WIN32) || defined (WIN64)
GetModuleFileName(path, &size);
#elif defined (__APPLE__)
_NSGetExecutablePath(path, &size);
#elif defined(UNIX)
if (readlink("/proc/self/exe", buf, sizeof(buf)) == -1) path = buf;
#elif defined(__FreeBSD__)
int mib[4];
mib[0] = CTL_KERN;
mib[1] = KERN_PROC;
mib[2] = KERN_PROC_PATHNAME;
mib[3] = -1;
sysctl(mib, 4, buf, sizeof(buf), NULL, 0);
path = buf;
#elif defined(SUNOS)
path = getexecname();
#endif
return path;
}
(обратите внимание, что я только что протестировал раздел Unix, я не знаю больше ни о чем)
Нет портативного способа.
Грубые идеи для основных операционных систем (я опускаю детали здесь):
Примечание: argv [0] обычно бесполезен; он дает имя, которое использовалось для вызова программы в консольной среде, но не разрешает пути поиска оболочки и может быть недоступно в некоторых средах. Он не существует в программах с графическим интерфейсом Windows, и я даже не уверен, что MacOS передает как argv [0], когда вы запускаете программу через графический интерфейс.
Других решений пока нет …