使用'系统(...)'

时间:2017-11-19 15:19:01

标签: c cmd

如果我启动命令提示标准"方式,转到' 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)中。

1 个答案:

答案 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") ;