c - shellexec 和 c :\program files - x86 and x64 portability

标签 c windows

我正在修改一个开源 GUI(用 c 编写)以将新菜单项添加到托盘应用程序。新的菜单项在程序根目录 c:\program files 目录中执行一个文件 (update.exe)。我正在使用 shellexec(),它在 x86 上运行良好,但由于 x64 上的路径不同 - c:\program files (x86),它无法加载。我想使用一些像 %programfiles% 这样的环境变量的效果。对此有什么优雅的解决方案?

或者,我确实可以更改 update.exe 文件的存储位置。将它放在“程序文件”中似乎是最合乎逻辑的。对于上面的问题,它应该放在程序文件之外吗?如果是,在哪里?

最佳答案

您可以使用 GetModuleFileName()检索可执行文件的完整路径。然后你只需要从末尾剪切文件名,你就会有完整的目录路径。

像这样的东西应该可以解决问题:

TCHAR szPath[MAX_PATH];
LPTSTR szFileName;

GetModuleFileName(g_hInstance, szPath, sizeof(szPath)/sizeof(TCHAR));
szFileName = _tcsrchr(szPath, TEXT("\\"));
*szFileName = TEXT('\0');

// szPath now contains the path

(警告!未经测试!)

关于c - shellexec 和 c :\program files - x86 and x64 portability,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4071379/

相关文章:

c - 如何仅通过内存地址定位bug?

c - 解释在主动套接字(而不是被动套接字)上调用时接受函数的行为

c - 如何用随机(十六进制)字符填充字符串?

python - 多个 conemu 窗口 - 如何区分?

.net - 任何人都可以向旧的 SNMP 小伙子解释 WMI 吗?

c - 关于C中循环中函数(参数)的范围

c++ - stdout 除了控制台窗口之外还有其他东西吗?

windows - 批处理脚本 - 如果存在复制到 %localappdata% 错误

c++ - 如何在 Windows 上从命令行运行 clang?

windows - 系统如何定义进程获得的虚拟内存部分?