13

I'm an old-timer experienced Windows user from way back. My main computer is a Windows 7 Pro box. We bought a new PC for a new office; it of course has Windows 10 (Home) on it. I was doing some work on the new PC and wanted to send the result of what I was doing -- the IPv6 address of a printer -- back to the Win 7 PC. I wanted to use NET SEND but that isn't available on Win 10 (or Win 7 as it turns out).

Research found that the MSG command is supposed to (sort of) do what NET SEND did in the old days. A web site sample showed a command prompt window with the current directory being C:\WINDOWS\SYSTEM32 and showed the result of MSG /? giving the syntax of the command -- just what I wanted.

But running MSG /? on the Win 10 box said that MSG was not recognized as a command. (It works on Win 7, with MSG.EXE being in SYSTEM32.) A bit of digging found MSG.EXE in a directory under WinSxS --

C:\Windows\WinSxS\amd64_microsoft-windows-t..commandlinetoolsmqq_31bf3856ad364e35_10.0.17134.1_none_0ea9fdb9152f846c

but it doesn't run right even with that set as the current directory. Something needs to install it, it seems -- tho there was nothing about doing anything like that in the online sample that I had found.

I checked "Programs" (what used to be "Programs and Features") and did not see it as something I could install.

What's going on? How do I make this usable? What other commads need to have the same kind of magic done so that they work from a normal command prompt?

Thanks for any assistance.

J.Merrill
  • 311

5 Answers5

16

You are apparently using on all computers the Home version. This version does not include the MSG command. The command is only available in Windows versions starting from Pro.

As a side-remark, tested on Windows Enterprise, even the old "net send" command still exists in that version.

By all reports, trying to transplant msg.exe from higher Windows versions to Home does not work, so there is no easy workaround.

You can however write your own.

By using the free psexec you can execute code on remote computers that creates a pop-up message.

See the post Show a popup/message box from a Windows batch file for a few ideas.

The niftiest ones I found were:

  • mshta.exe, the runtime engine for Windows .hta HTML applications, accepts a general URL as command line argument, including a javascript: protocol URL. So you could issue an alert with a timeout of 10 seconds this way:

    mshta "javascript:var sh=new ActiveXObject( 'WScript.Shell' ); sh.Popup( 'Message!', 10, 'Title!', 64 );close()"
    
  • Using a VBScript file and call it using CScript, with something like the following in a .vbs file:

    Set objArgs = WScript.Arguments
    messageText = objArgs(0)
    MsgBox messageText
    
harrymc
  • 498,455
4

The MSG program is only available on Pro or Enterprise versions of Windows.
It's main intend is to notify users on a terminal server or similar stuff. It requires certain rights normally only available to administrators (normal user can be given the right to use it) meaning its main intend is to be used by windows Administrators to notify users about an shutdown, problem, etc.

The subfolder inside of WinSxS is from an Windows Update. Microsoft calls this folder "Component Store" and more info about it can be found in this article:
https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/manage-the-component-store
I was able to find the same folder with msg.exe on my system. Looking at it, it doesn't seem like its an valid .exe file at all, its starts with "DCS" when looking at it in an hex editor but should start with "MZ" if its an executable file. I was not able to find any documentation about this "DCS" header.

Alternatives would be simply sending an mail and opening it in your web mail client if both computers have internet access. Windows 7 and 10 also both come with an feature to offer assistance to other people, it can be opened by starting msra.exe If that method does not work you could use other remote management tools like Teamviewer. Teamviewer has an option to use LAN only connections meaning no internet is required to use it on a local LAN.

User025
  • 742
2

Running MSG /? on the Win 10 box said that MSG was not recognized as a command

We bought a new PC for a new office; it of course has Windows 10 (Home) on it.

Home editions of Windows do not include msg

Source Msg - Windows CMD - SS64.com

What other commands need to have the same kind of magic done so that they work from a normal command prompt?

That question is "too broad".

DavidPostill
  • 162,382
1

As detailed here and here, you need both msg.exe (to go in C:\Windows\System32)

  • C:\Windows\WinSxS\amd64_microsoft-windows-t..commandlinetoolsmqq_31bf3856ad364e35_10.0.18362.1_none_fb86e15d293d8d62\msg.exe

and msg.exe.mui (to go in C:\Windows\System32\en-US)

  • C:\Windows\WinSxS\amd64_microsoft-windows-t..etoolsmqq.resources_31bf3856ad364e35_10.0.18362.1_en-us_f257f72e582e10e5\msg.exe.mui

However, first they need to be decompressed (shameless self-promotion) using SXSEXP:

> sxsexp64.exe msg.exe expand\msg.exe
Processing target path  msg.exe
msg.exe => expand\msg.exe
File size               12602 bytes

DCS_HEADER found.

 NumberOfBlocks         1
 UncompressedFileSize   26112

DCS_BLOCK #1
 Block->CompressedBlockSize     0000312A
 Block->DecompressedBlockSize   00006600
Operation Successful
> sxsexp64.exe msg.exe.mui expand\msg.exe.mui
Processing target path  msg.exe.mui
msg.exe.mui => expand\msg.exe.mui
File size               2150 bytes

DCS_HEADER found.

 NumberOfBlocks         1
 UncompressedFileSize   7680

DCS_BLOCK #1
 Block->CompressedBlockSize     00000856
 Block->DecompressedBlockSize   00001E00
Operation Successful

These decompressed files are what need to be copied to C:\Windows\System32 and C:\Windows\System32\en-US respectively to use MSG.

andronoid
  • 153
0

Not my original idea.. but here's what I how I use vbs but not really..(the file is automaticllly deleted)

echo x=msgbox("Hey! Here is a message!" ,4096, "Hey! Here is a title!") > %tmp%\tmp.vbs && cscript //nologo %tmp%\tmp.vbs & del %tmp%\tmp.vbs

Refer to this answer