Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 是否可以从Cygwin ssh会话中正确执行qwinsta?_Windows_Ssh_Cygwin - Fatal编程技术网

Windows 是否可以从Cygwin ssh会话中正确执行qwinsta?

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

我让Cygwin在Windows 7机器上运行,并让Cygwin ssh服务器在其上运行。在Linux上,我有一个shell脚本

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
    程序。它应该毫无问题地工作

  • 视窗10 接下来,对于Windows 10来说,这有点棘手,因为文件是压缩的(二进制增量压缩,文件签名
    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!