【问题标题】:Process.Start() Open exe file nothing hapen in UWPProcess.Start() 在 UWP 中打开 exe 文件没有发生任何事情
【发布时间】:2019-12-27 08:27:15
【问题描述】:

没有错误,什么也没发生,文件目标仍然在我的路径中

public void keyboard(){

    ProcessStartInfo touchkey = new ProcessStartInfo(@"C:\Program 
    Files\Common Files\microsoft shared\ink\TabTip.exe");
    touchkey.WorkingDirectory = @"C:\";
    touchkey.WindowStyle = ProcessWindowStyle.Hidden;
    Process.Start(touchkey);
 } 

更新

The suggested solution threw a `UnauthorizedAccessException`:

var path = @"ms-appx://C:/Program Files/Common Files/microsoft 
shared/ink/TabTip.exe";
var file = await 

Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(path); 等待 Windows.System.Launcher.LaunchFileAsync(file);

更新2

我尝试使用 FullTrustProcessLauncher 它工作正常,但就像键盘 tabtip.exe 之前的代码不显示我不知道我应该做什么

   await Dispatcher.RunAsync(CoreDispatcherPriority.High, () =>
     {
      FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync();

     });

【问题讨论】:

    标签: c# uwp


    【解决方案1】:

    UWP 应用程序是沙盒化的,由于安全限制,无法直接启动其他进程。

    启动其他应用程序的唯一方法是这些应用程序注册了 URI,或者应用程序是特定文件类型的默认处理程序。

    在这些情况下,您可以使用LaunchUriAsyncLaunchFileAsync 等方法

    【讨论】:

    • 它给了我这个异常 System.UnauthorizedAccessException: '访问被拒绝。 (来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))'
    • @WorawitSudjitrak,是的,这是因为根据我的回答,您不能在 UWP 应用程序中使用 ProcessStartInfo;这就是为什么它是一个UnauthorizedAccess异常。如果您指的是使用 LaunchFileAsync 仅用于打开“文档”...例如您可能会启动一个 .txt 文件,它会打开与 *.txt 文件关联的应用程序;它不是用来运行任意程序的。
    • LaunchFileAsync no ACCEEEDENiED 我可以打开 .txt 文件,但运行 .exe 文件时没有任何反应,感谢您的快速回答
    • @WorawitSudjitrak,没错,您可以打开一个 .txt 文件(可能会打开记事本),但针对您最初的问题,答案仍然是......您无法启动另一个程序(即通过从 UWP 中启动 .exe)...无论您尝试哪种方式,Microsoft 都不允许这样做。启动另一个程序的唯一方法是它是否具有 URI,或者是文档类型(如 .txt)的默认程序
    • FullTrustProcessLauncher 在我的文件夹资产中打开另一个 Installer.exe 程序可以正常接受 TabTip.exe 我认为 TabTip.exe 有问题
    【解决方案2】:

    没有 TabTip.exe

    根据exe 的路径判断,我知道您正在尝试显示屏幕键盘。我建议一个更好的方法是触发新的支持触摸的键盘,这很容易通过InputPane API 与 UWP 无关:

    var pane = InputPane.GetForCurrentView();
    pane.TryShow();
    

    使用 TabTip.exe

    如果您出于某种原因更喜欢较旧的屏幕键盘,则现有代码存在两个问题。

    首先,ms-appx:方案用于引用应用程序安装路径下的文件。你需要的路径是绝对路径,所以不能在那里使用。

    其次,由于这是硬盘驱动器上的任意路径,您无法直接访问它(因为 UWP 应用程序在沙箱中运行,出于安​​全原因无法直接访问文件系统)。要访问该文件,您需要声明broadFileSystemAccess 功能,然后您可以初始化StorageFile 实例。您可以查看 this SO question 以了解如何做到这一点。

    注意:我没有我的 VS PC,所以我不能确定这是否允许你启动可执行文件,因为这似乎是一个额外的权限,可能不被授予。万一这失败了,我强烈推荐第一个解决方案。

    【讨论】:

    • 感谢您提供良好的信息并编辑为完美的评论我可以访问目标文件但 TabTip.exe 不像 WPF 那样在 UWP 中显示我认为 UWP 阻止动画当程序运行而不显示时
    【解决方案3】:

    确保您编辑了清单文件并在应用程序中添加了完全信任进程的扩展。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-18
      • 2011-09-16
      • 2021-05-13
      • 1970-01-01
      • 2019-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多