Windows 是否可以从Cygwin ssh会话中正确执行qwinsta?
我让Cygwin在Windows 7机器上运行,并让Cygwin ssh服务器在其上运行。在Linux上,我有一个shell脚本Windows 是否可以从Cygwin ssh会话中正确执行qwinsta?,windows,ssh,cygwin,Windows,Ssh,Cygwin,我让Cygwin在Windows 7机器上运行,并让Cygwin ssh服务器在其上运行。在Linux上,我有一个shell脚本 ssh myuser@mymachine "qwinsta | grep Active" 查看谁已登录。这在WindowsServer2008R2机器上运行良好,但在Windows7上似乎有问题 如果我在Windows 7计算机上尝试此操作,我会得到: bash: qwinsta: command not found 现在,这就是奇怪的开始 如果我正常登录到Win
ssh myuser@mymachine "qwinsta | grep Active"
查看谁已登录。这在WindowsServer2008R2机器上运行良好,但在Windows7上似乎有问题
如果我在Windows 7计算机上尝试此操作,我会得到:
bash: qwinsta: command not found
现在,这就是奇怪的开始
如果我正常登录到Windows 7计算机并使用Windows资源管理器查看C:\Windows\System32,我会看到qwinsta.exe。如果我打开CMD会话并在C:\Windows\System32中执行dir
,我会看到qwinsta.exe。如果我打开Cygwin shell并在/cygdrive/c/Windows/System32中执行ls qwinsta.exe
ls: cannot access qwinsta.exe: No such file or directory
如果我从Cygwin shell执行cmd/c dir c:\\\\Windows\\\\System32\\\\qwinsta.exe
,我会得到一个“未找到文件”
如果我将qwinsta.exe复制到我的Cygwin主目录中,那么它在我的主目录中通过ls可见。如果我尝试从Cygwin shell运行qwinsta的本地副本,它会运行,但它也会输出一行:
{Message(): LoadString failed, Error 15105, (0x00003B01)}
Windows 7上的qwinsta怎么了?问题是
qwinsta.exe
实际上不在C:\Windows\System32
中。它实际上是在
C:\Windows\winsxs\amd64_microsoft-windows-t..commandlinetoolsmqq_31bf3856ad364e35_6.XX.XXX.XXXX_none_XXXXXXXX\qwinsta.exe
使用上述路径(或指向该路径的软链接)将在任何计算机上运行qwinsta.exe
,并且不需要将可执行文件复制到主目录
错误消息{message():LoadString失败,错误15105,(0x00003B01)}
是关于多语言用户界面(本地化)系统无法找到正在运行的程序的错误消息本地化信息(请参阅)。在这种情况下,cygwin shell似乎没有提供在您的语言的区域设置文件夹中查找qwinsta.exe.mui
所需的信息(通常是C:\Windows\System32\en-US
或任何您的区域设置)。查看此文件夹有些误导,因为资源管理器将显示此目录中的文件,但当您运行ls/cygdrive/c/Windows/System32/en-US
时,没有qwinsta.exe.mui
文件。我怀疑这与NTFS中的新链接结构有关(请参见命令),但我还没有找到解决这部分问题的方法。解决了:
C:\Windows\winsxs\amd64\U microsoft-Windows-t..commandlinetoolsmqq\U 31bf3856ad364e35\U 6.1.7600.16385\U none\U 851e6308c5b62529
(复制和粘贴该位置与手动查找位置一样有效。)
您应该找到三个文件:Msg.exe
,qser.exe
,和qwinsta.exe
。
将这些文件复制到C:\Windows\system32
文件夹中C:\Windows\winsxs\amd64\u microsoft-Windows-t..etoolsmqq.resources\u 31bf3856ad364e35\u 6.1.7600.16385\u en-us\u 7bef78d9f4a6a8ac
.mui
结尾的文件外,您应该可以找到三个名称类似的文件
C:\Windows\system32\en-US
文件夹中msg
程序。它应该毫无问题地工作44 43 53 01
)。尝试按原样使用它们会引发不受支持的16位应用程序错误:
由于与64位版本的Windows不兼容,程序或功能“\??\C:\Windows\System32\msg.exe”无法启动或运行。请联系软件供应商,询问是否有64位Windows兼容版本
已经制作了一个特定的工具来解压缩这些文件:(为我指明了正确的方向)
用法:
> 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
现在可以将这些解压缩文件分别复制到
C:\Windows\System32
和C:\Windows\System32\en US
例如:
> msg * Hello, World!
很高兴知道文件的实际位置。不幸的是,从这个位置运行它与将它复制到我的主目录在执行上没有区别。在这两种情况下,它仍然给出相同的运行时错误消息。但是,我发现如果我将qwinsta.exe复制到我的主目录,并创建一个“en-US”目录,然后将来自C:\Windows\System32\en-US的qwinsta.exe.mui的副本放在我的“en-US”目录中,然后我可以从我的主目录运行qwinsta,而不会弹出运行时错误消息。MultipleInterface的答案为我提供了足够有用的信息,可以让我四处寻找并找到可行的解决方案,所以我将它标记为可接受的答案。@MultipleInterface,在那一百万个文件夹中,你是如何找到位置的?
> msg * Hello, World!