【问题标题】:dart / flutter run process with sudodart/flutter 使用 sudo 运行进程
【发布时间】:2020-09-27 22:33:08
【问题描述】:

我想为 mac 桌面开发一个颤振应用程序并使用sudo powermetrics 访问 macs powermetrics 有没有办法在第一次运行时询问用户此命令的 sudo 权限?

【问题讨论】:

    标签: flutter dart flutter-desktop


    【解决方案1】:

    嗨,我只是在玩颤振,我正在解决同样的问题。

    一般来说,我们需要从 bash 调用的 GUI 版本的 sudo。

    运行需要 sudo 的 dscacheutil 的 bash commnad 示例:

    /usr/bin/osascript -e 'do shell script "dscacheutil -flushcache  2>&1 etc" with administrator privileges'
    

    然后我试图通过 Process.run() 运行这个命令,但没有成功。然后我创建了测试 bash 脚本,并尝试使用 Process.run() 直接运行 bash 脚本。它告诉我然后我没有特权。

    所以我不得不在 Xcode 中将我的 App Sandbox 值更改为 NO。 我们必须直接在macos 文件夹中打开Runner.xcodeproj

    然后将 App Sandbox 更改为 NO:

    不,我们必须准备 bash 脚本:

    #!/bin/bash
    /usr/bin/osascript -e 'do shell script "dscacheutil -flushcache  2>&1 etc" with administrator privileges'
    

    把它保存在某个地方,最后一步我们可以在 Flutter 中调用这个 bash 脚本。

    void main() {
    
          Process.run('/Users/nikix/Desktop/bash_test.sh',[]).then((result){
          stdout.write(result.stdout);
          stderr.write(result.stderr);
          });
    }
    

    现在我正在使用 sudo 获得 GUI 提示,它似乎可以工作。但我真的不知道这是否是正确的方法。我是 Flutter 的新手。

    更新:

    我尝试构建 Flutter 应用程序flutter build macos,但无法运行 bash 脚本。然后我找到了this package called process_run

    然后我能够从构建的应用程序运行自定义 bash 脚本

    在您的 yaml pubspec.yaml 中添加该包:

    dependencies:
      flutter:
        sdk: flutter
      process_run: any
    

    下一步是允许 Sanbox App 在 xcode 中发布应用版本:

    最后一步在 Dart 中运行我们的 bash 代码:

    import 'package:process_run/shell.dart';
    void main() {
    
      var shell = Shell();
    
      shell.run("""
        #!/bin/bash
        /usr/bin/osascript -e 'do shell script "dscacheutil -flushcache  2>&1 etc" with administrator privileges'
        """).then((result){
          print('Shell script done!');
        }).catchError((onError) {
          print('Shell.run error!');
          print(onError);
        });
    };
    

    【讨论】:

      猜你喜欢
      • 2020-09-18
      • 1970-01-01
      • 2020-04-22
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      • 2015-07-09
      • 2021-04-14
      相关资源
      最近更新 更多