【问题标题】:Is it possible to properly execute qwinsta from a Cygwin ssh session?是否可以从 Cygwin ssh 会话正确执行 qwinsta?
【发布时间】:2011-10-25 20:35:21
【问题描述】:

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

ssh myuser@mymachine "qwinsta | grep Active"

查看谁已登录。这在 Windows Server 2008 R2 机器上运行良好,但在 Windows 7 上似乎有问题。

如果我在 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 怎么样了?

【问题讨论】:

    标签: windows ssh cygwin


    【解决方案1】:

    Windows 10

    Erutan2099's answer 开始,对于 Windows 10,这有点棘手,因为文件被压缩(二进制增量压缩,文件签名 44 43 53 01)。尝试按原样使用它们会引发 Unsupported 16-Bit Application 错误:

    由于与 64 位版本的 Windows 不兼容,程序或功能“\??\C:\Windows\System32\msg.exe”无法启动或运行。请联系软件供应商询问是否有 64 位 Windows 兼容版本可用。

    已经制作了一个特定的工具来解压此类文件:SXSEXPthis post 为我指明了正确的方向)


    用法:

    > 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
    

    这些解压文件现在可以分别复制到C:\Windows\System32C:\Windows\System32\en-US

    例子:

    > msg * Hello, World!
    

    【讨论】:

      【解决方案2】:

      已解决:

      1. 首先,转到C:\Windows\winsxs\amd64_microsoft-windows-t..commandlinetoolsmqq_31bf3856ad364e35_6.1.7600.16385_none_851e6308c5b62529 (复制并粘贴该位置与手动查找它一样有效。) 您应该找到三个文件:Msg.exeQuser.exeqwinsta.exe。 将这些文件复制到您的C:\Windows\system32 文件夹

      2. 接下来,转到C:\Windows\winsxs\amd64_microsoft-windows-t..etoolsmqq.resources_31bf3856ad364e35_6.1.7600.16385_en-us_7bef78d9f4a6a8ac

      您应该会找到三个名称相似的文件,但这些文件将以 .mui 结尾。

      1. 将这三个文件全部复制到您的C:\Windows\system32\en-US 文件夹中。

      2. 现在尝试运行msg 程序。它应该可以正常工作。

      【讨论】:

        【解决方案3】:

        问题在于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 failed, Error 15105, (0x00003B01)} 是关于多语言用户界面(本地化)系统无法找到正在运行的程序的错误消息本地化信息(请参阅System Error Codes)。在这种情况下,cygwin shell 似乎没有为qwinsta.exe 提供在您的语言的区域设置文件夹(通常是C:\Windows\System32\en-US 或您的区域设置)中找到qwinsta.exe.mui 所需的信息。查看此文件夹有些误导,因为资源管理器会显示此目录中的文件,但是当您运行 ls /cygdrive/c/Windows/System32/en-US 时,没有 qwinsta.exe.mui 文件。我怀疑这与 NTFS 中的新链接结构有关(请参阅mklink 命令),但我还没有弄清楚如何解决这部分问题。

        【讨论】:

        • 很高兴知道文件的实际位置。不幸的是,从这个位置运行它与将它复制到我的主目录中时,执行没有区别。在这两种情况下,它仍然给出相同的运行时错误消息。但是,我发现如果我将 qwinsta.exe 复制到我的主目录,并创建一个“en-US”目录并将 C:\Windows\System32\en-US 中的 qwinsta.exe.mui 的副本放在我的“en-US”目录,然后我可以从我的主目录运行 qwinsta,而不会弹出运行时错误消息。
        • multipleinterfaces 的回答为我提供了足够有用的信息来解决问题并找到可行的解决方案,因此我将其标记为已接受的答案。
        • @multipleinterfaces,在这百万个文件夹中,您是如何确定位置的?
        猜你喜欢
        • 1970-01-01
        • 2018-04-01
        • 2020-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多