【问题标题】:Elevated executable can't find OS Tool提升的可执行文件找不到操作系统工具
【发布时间】:2018-02-14 17:34:00
【问题描述】:

我正在尝试在我的 C# WinForm 应用程序中创建一个快捷方式,以便用户启动 Microsoft 的“数字化仪监控映射工具”(MultiDigiMon.exe)。但是,即使以管理员身份运行,我的应用程序或从它启动的 cmd 进程似乎也找不到有问题的可执行文件,我也不知道为什么。

我的快捷方式由一个简单的按钮组成,单击事件与休闲功能挂钩。

    private void TouchButton_Click(object sender, EventArgs e)
    {
        ProcessStartInfo start = new ProcessStartInfo("C:\\Windows\\System32\\cmd.exe");
        start.WorkingDirectory = "C:\\Windows\\System32";
        start.CreateNoWindow = false;
        start.UseShellExecute = false;
        //start.Arguments = "/K \"cd C:\\Windows\\System32 && MultiDigiMon.exe -touch\"";

        Process.Start(start);
    }

根据我在 Win10 系统上的经验,MultiDigiMon.exe 始终可以在 C:\Windows\System32 中找到(假设 C 驱动器是您的根目录)。此外,上面的参数行已被注释掉,以使以下屏幕截图尽可能相同。

左侧是使用上述代码启动的命令提示符,右侧是通过在操作系统的任务栏中键入 cmd 并以管理员身份运行第一个结果来启动的命令提示符。如您所见,两个提示都标记为管理员,但左侧无法启动 MultiDigiMon.exe,甚至不会使用 dir 命令列出存在的文件。权利似乎对任何一个命令都没有问题。 (如果没有连接多个触摸屏设备,MultiDigiMon.exe 似乎根本没有做任何事情,而且我不相信它会提供任何文本输出,尤其是在成功的情况下)。

最后,我还检查了 MultiDigiMon.exe 的权限,并且(完全控制的 TrustedInstaller 除外)每个人都具有读取和执行权限。有人可以解释为什么我不能从左侧提示或直接从我的应用程序启动 MultiDigimon.exe 吗?

【问题讨论】:

  • 左图显示syswow64文件夹和右图-system32。这与提升无关,但与 32 位应用程序的 fs 重定向有关
  • 现在我只是觉得很愚蠢。很可能就是这样。谢谢。现在我只需要弄清楚如何在我的快捷方式中颠覆重定向。

标签: c# windows cmd


【解决方案1】:

正如RbMm 所评论的那样,问题在于,由于我的应用程序被编译为在任何 cpu 上运行,它被文件系统视为 32 位应用程序,并将对 System32 目录的所有访问重定向到 SysWOW64。

要解决这个问题,您可以将“System32”宽度替换为“Sysnative”,如 here 所讨论的那样。在我的情况下,我的最终代码最终看起来像是闲置的。

private void TouchButton_Click(object sender, EventArgs e)
{
    ProcessStartInfo start = new ProcessStartInfo("C:\\Windows\\Sysnative\\MultiDigiMon.exe");
    start.WorkingDirectory = "C:\\Windows\\System32";
    start.CreateNoWindow = false;
    start.UseShellExecute = false;
    start.Arguments = "-touch";

    Process.Start(start);
}

【讨论】:

  • @RbMm 再次感谢。如果您想标记您的答案,请发布一个,以便我将其标记为已接受。在此期间,我将把它留在这里。
猜你喜欢
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多