如果我启动命令提示标准"方式,转到' C:\ Windows \ System32'做" dir m * .exe",我得到了几个屏幕"上市其中包括msg.exe'在那儿。如果我做了' msg /?' :
C:\WINDOWS\system32>msg /?
MSG {username | sessionname | sessionid | @filename | *}
[/SERVER:servername] [/TIME:seconds] [/V] [/W] [message]
电子 TC
' msg'命令按预期工作。
但是,如果我从一个程序启动命令提示符,使用'系统(...)'函数,即这样(Visual Studio中的控制台应用程序):
#include "stdafx.h"
#include <stdlib.h>
int _tmain(int argc, _TCHAR* argv[])
{
system("cmd") ;
return 0;
}
&#39; MSG&#39;不起作用:
C:\WINDOWS\system32>msg /?
'msg' is not recognized as an internal or external command,
可操作程序或批处理文件。
此命令提示符中的dir m*.exe
只提供了半个列表的屏幕。特别是,msg.exe
不存在。
有谁可以解释原因?有人知道走动吗?或者(甚至更好)我该怎么做&#39; msg&#39;从一个程序?即。
system("msg * /server:undis "Directory 'expenses' synced") ;
我会把它嵌入到一个程序中运行&#34;程序在/后进行更改&#34;在SyncBack Pro(2BrightSparks)中。
答案 0 :(得分:0)
早上好注释,问题很可能是您正在构建一个32位程序,因此使用cmd
运行的system
是32位cmd模拟器而不是nomral win64 cmd程序。
这就是导致问题的原因 - 每当您尝试以32位模式访问C:\ WINDOWS \ system32时,系统会默认将您发送到C:\ WINDOWS \ sysWOW64。那是因为在win64上,system32
实际上包含64位程序和dll,而不是32位程序。 32位的是sysWOW64。
现在通常这不是问题 - 在32位程序中你想要的大多数都在sysWOW64中,所以一切都很好。问题是msg
不是。因此,为了解决这个问题,您需要从32位沙箱中“逃脱”。为此,您需要转到C:\ WINDOWS \ sysnative。此目录(仅在32位模式下可用/可见)以静默方式重定向到(实际的,64位)C:\ WINDOWS \ system32目录。如果您cd到该目录,您应该看到msg.exe并能够运行它。或者直接从系统命令运行它:
system("C:\\WINDOWS\\sysnative\\msg * /server:undis "Directory 'expenses' synced") ;