我试图在我的C#WinForm应用程序中创建一个快捷方式,以便用户启动Microsoft" Digitizer to Monitor Mapping Tool" (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系统上的经验,可以在C:\ Windows \ System32中找到MultiDigiMon.exe(假设C驱动器是您的根目录)。此外,上面的参数行被注释掉,以使下面的屏幕截图尽可能相同。
左侧是使用上面的代码启动的命令提示符,右侧是通过在OS的任务栏中键入cmd并以管理员身份运行第一个结果而启动的命令提示符。正如您所看到的,两个提示都标记为管理员,但左侧无法启动MultiDigiMon.exe,甚至无法使用dir命令列出该文件。这两个命令似乎都没有问题。 (如果没有连接多个触摸屏设备,MultiDigiMon.exe似乎根本不做任何事情,我不相信它会提供任何文本输出,特别是如果成功的话)。
最后,我还检查了MultiDigiMon.exe的权限,并且(除了具有完全控制权的TrustedInstaller之外)每个人都已阅读并执行权限。有人可以解释为什么我无法从我的应用程序中直接从我的应用程序启动MultiDigimon.exe吗?
答案 0 :(得分:0)
由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);
}