直接在运行(win+R)中运行 与cmd中执行程序 结果不同

运行的命令是
xxx.exe para1 para2 para3 para4 –mode=1
以上命令(包括exe)中所有的路径已是绝对路径
现在发现在cmd中是正常的
但如果直接在运行里敲命令,或者调用system,createprocess 或者将命令保存为批处理调用运行 最后一个参数(-mode=1) 似乎都没有得到

不清楚是什么原因,exe也在属性中设为以管理者身份运行了

解决了 是客户给的命令中有字符有问题,怀疑命令行中自行转换了

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt: 该问题可能是由UAC(用户帐户控制)权限控制机制引起的。在Windows Vista及更高版本中,为了保障计算机的安全,用户需要对一些敏感操作进行明确的授权才能执行。当您在cmd中执行程序或在资源管理器中双击.exe文件运行时,通常会自动提升到管理员权限。但是,在使用system、createprocess等方式调用程序时,程序会以普通用户的权限运行,因此出现了不同的结果。 为此,您可以在代码中加入以下代码段,使用API函数ShellExecuteEx来以管理员身份重新运行程序: ```c++ HWND hwnd = NULL; SHELLEXECUTEINFO ShExecInfo = { 0 }; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); ShExecInfo.fMask = SEE_MASK_FLAG_DDEWAIT | SEE_MASK_FLAG_NO_UI; ShExecInfo.hwnd = hwnd; ShExecInfo.lpVerb = "runas"; ShExecInfo.lpFile = "xxx.exe"; ShExecInfo.lpParameters = "para1 para2 para3 para4 –mode=1"; ShExecInfo.lpDirectory = NULL; ShExecInfo.nShow = SW_SHOW; ShExecInfo.hInstApp = NULL; ShellExecuteEx(&ShExecInfo); ``` 其中,lpVerb参数设置为"runas",表示以管理员身份运行程序。通过这种方式,您可以在代码中自动提升权限并重新运行程序,以避免UAC权限控制可能导致的问题。

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^