我有一个程序,它包含许多不同操作系统的二进制文件
我需要获取二进制文件的位置(想想自动更新程序)
如何在'你的' OS?
(把它想象成挑战,各种各样的:))
编辑注意:该程序可以是便携式(运行闪存驱动器等)或安装(例如最初以.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部分,我不知道其他任何事情)
答案 0 :(得分:3)
没有可移植的方式。
主要操作系统的粗略想法(我在这里省略了详细信息):
注意:argv [0]通常没用;它提供了用于在控制台环境中调用程序的名称,但不解析shell搜索路径,并且在某些环境中可能不可用。它在Windows GUI程序中不存在,当你通过GUI运行程序时,我甚至不确定MacOS传递的是argv [0]。