草庐IT

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

coder 2024-06-13 原文

我正在修改一个开源 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 - shellexec 和 c :\program files - x86 and x64 portability的更多相关文章

  1. ruby-on-rails -/usr/local/lib/libz.1.dylib,文件是为 i386 构建的,它不是被链接的体系结构 (x86_64) - 2

    在我的mac上安装几个东西时遇到这个问题,我认为这个问题来自将我的豹子升级到雪豹。我认为这个问题也与macports有关。/usr/local/lib/libz.1.dylib,filewasbuiltfori386whichisnotthearchitecturebeinglinked(x86_64)有什么想法吗?更新更具体地说,这发生在安装nokogirigem时日志看起来像:xslt_stylesheet.c:127:warning:passingargument1of‘Nokogiri_wrap_xml_document’withdifferentwidthduetoproto

  2. ruby - libxml-ruby 无法在 x86_64 上加载 - 2

    我们在服务器端遇到libxml-rubygem的问题可能是因为它使用x86_64架构:$uname-aLinuxip-10-228-171-642.6.21.7-2.fc8xen-ec2-v1.0#1SMPTueSep110:25:30EDT2009x86_64GNU/Linuxrequire'libxml'LoadError:/usr/local/ruby-enterprise/lib/ruby/gems/1.8/gems/libxml-ruby-1.1.4/lib/libxml_ruby.so:invalidELFheader-/usr/local/ruby-enterprise/

  3. ruby - 在 Windows 8 : Unable to execute file C:\Program Files(x86)\Heroku\ruby-1. 9.3\bin\gem.bat 上安装 heroku toolbelt 时出错 - 2

    我想安装herokutoolbelt。我选择完全安装。安装时出现此错误。安装完成后herokulogin不起作用。 最佳答案 试试这个:Followthislink无论它是否与在Windows7上运行游戏有关,请在您的Windows8上尝试这个。如果它有效,请告诉我们。 关于ruby-在Windows8:UnabletoexecutefileC:\ProgramFiles(x86)\Heroku\ruby-1.9.3\bin\gem.bat上安装herokutoolbelt时出错,我们在

  4. ruby - 如何解析 "Your bundle only supports platforms ["x86-mingw3 2"] but your local platforms are ["ruby​​", "x86_64-linux"]" - 2

    我正在Windows机器上构建一个Rails站点,但是当我检查我的Gemfile.lock时,我在我的Travis构建中遇到以下错误:Yourbundleonlysupportsplatforms["x86-mingw32"]butyourlocalplatformsare["ruby","x86_64-linux"],andthere'snocompatiblematchbetweenthosetwo列表这是完整的日志:https://travis-ci.org/bikebike/BikeBike/builds/222395810#L654我查看了我的Gemfile.lock并指出:

  5. ruby - bundle 安装错误 - 你的 bundle 只支持平台 [] 但你的本地平台是 ["ruby", "x86_64-linux"] - 2

    在执行bundle安装时出现此错误;谷歌似乎是一个常见问题,但我似乎找不到解决方法(似乎是关于Gemfile.lock的建议,但我将该文件移到了另一个目录)#bundleinstallYourbundleonlysupportsplatforms[]butyourlocalplatformsare["ruby","x86_64-linux"],andthere'snocompatiblematchbetweenthosetwolists.这是我的Gemfile,目录中没有Gemfile.lock。[root@ip-172-30-4-16rails]#gem-v2.6.11[root@i

  6. ruby - 如果我不指定 <programfile>,我如何将 <arguments> 传递给 IRB? - 2

    自:irb--help用法:irb.rb[选项][程序文件][参数]我知道如果我包含一个程序文件,我可以将参数传递给ARGV例如:irbtest.rbABC其中test.irb只是“pARGV”产生:["a","b","c"]使programfile在DOS中成为con...我可以执行以下操作irbconABCcon(main):001:0>ARGV产生:ARGV=>["A","B","C"]但这是系统相关的并且有回显输入的副作用:-(我真正喜欢的是类似的东西irb--abc顺便说一句:我知道我可以在irb中设置ARGV,但我的意图是别名special==irb-rSpecialLib

  7. ReDroid打造自己的云手机(二) arm转译x86 - 2

    自己做一个云手机,开源的AndroidInContainer解决方案前言前提正文总结前言市面上已经存在很多云手机厂商如多多云、雷电云、河马云手机等,价格从几十到上百元每月一台。价格还好说,但设备运行稳定性、可靠性、数据安全性全部依赖第三方厂商,注定不能进行敏感性操作或部署对安全可靠高要求的企业级服务。本文介绍一种开源的AIC(AndroidInContainer)解决方案ReDroid,使用本教程可以在一台普通型服务器运行多个安卓设备环境,并可在客户机电脑连接使用该云手机。之前写过一篇云服务器搭建ReDroid的方案(点击这里查看),但当时基于x86架构CPU是无法安装arm专用APP的,所以

  8. c - "Undefined symbols for architecture x86_64:"用于在 macOS Sierra 上使用 cgo 的库 - 2

    我正在尝试使用图书馆,https://github.com/go-steem/rpc,它使用了一些引用库的C代码。C库可以在这里找到,https://github.com/bitcoin-core/secp256k1我按照步骤安装了它$./autogen.sh$./configure$make$./tests$sudomakeinstall#optional并有这个输出;$sudomakeinstallPassword:CCsrc/libsecp256k1_la-secp256k1.loCCLDlibsecp256k1.laCCsrc/tests-tests.oCCLDtestsCCs

  9. linux - 链接 ARM 上的 SQLite3(x86_64 主机) - 2

    我需要交叉编译一些Go应用程序,以便它可以在RaspberryPi上运行。到目前为止,它在GOARCH=armGOOS=linux上运行良好,但是对于SQLite3,导入的符号存在一些问题:GOOS=linuxGOARCH=armgobuildvendor/github.com/mattn/go-sqlite3/sqlite3_go18.go:18:10:undefined:SQLiteConn我也试过GOOS=linuxGOARCH=armgogetgithub.com/mattn/go-sqlite3#github.com/mattn/go-sqlite3../../mattn/g

  10. c# - XmlSerializer 为 x86 和 x64 生成不同的输出 - 2

    我有以下示例代码,它为x86和x64生成不同的输出。classSampleSerializer{publicstaticstringSerialize(string[]samples){varxmlDocument=string.Empty;varxmlSerializer=newXmlSerializer(typeof(string[]));using(varms=newMemoryStream()){xmlSerializer.Serialize(ms,samples);xmlDocument=Encoding.UTF8.GetString(ms.ToArray());}retur

随机推荐