dart / flutter 使用 sudo 运行进程

m14*_*416 5 dart flutter flutter-desktop

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

Nik*_*kix 5

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

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

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

/usr/bin/osascript -e 'do shell script "dscacheutil -flushcache  2>&1 etc" with administrator privileges'
Run Code Online (Sandbox Code Playgroud)

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

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

在此输入图像描述

然后将App Sandbox更改为NO:

在此输入图像描述

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

#!/bin/bash
/usr/bin/osascript -e 'do shell script "dscacheutil -flushcache  2>&1 etc" with administrator privileges'
Run Code Online (Sandbox Code Playgroud)

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

void main() {

      Process.run('/Users/nikix/Desktop/bash_test.sh',[]).then((result){
      stdout.write(result.stdout);
      stderr.write(result.stderr);
      });
}
Run Code Online (Sandbox Code Playgroud)

现在我用 sudo 得到 GUI 提示,它似乎可以工作。但我真的不知道这是否是正确的方法。我对扑动很陌生。

更新:

我尝试构建 flutter 应用程序flutter build macos,但 bash 脚本无法运行。然后我发现这个包叫process_run

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

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

dependencies:
  flutter:
    sdk: flutter
  process_run: any
Run Code Online (Sandbox Code Playgroud)

下一步是允许 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);
    });
};
Run Code Online (Sandbox Code Playgroud)