shell.dart 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import 'dart:io';
  2. import 'package:process_run/shell.dart';
  3. import 'package:path/path.dart' as path;
  4. import 'package:naiyouwl/app/const/const.dart';
  5. import 'package:naiyouwl/app/utils/logger.dart';
  6. Future<void> killProcess(String name) async {
  7. log.debug("kill: ", name);
  8. if (Platform.isWindows) {
  9. await Process.run('taskkill', ["/F", "/FI", "IMAGENAME eq $name"]);
  10. } else {
  11. await Process.run('bash', ["-c", "ps -ef | grep $name | grep -v grep | awk '{print \$2}' | xargs kill -9"]);
  12. }
  13. }
  14. Future<bool> isRunningAsAdmin() async {
  15. final Shell shell = Shell();
  16. // 使用 "net session" 命令,如果成功,则意味着我们有管理员权限
  17. final List<ProcessResult> result = await shell.run('net session');
  18. if (result.isNotEmpty && result[0].exitCode == 0) {
  19. return true;
  20. } else {
  21. return false;
  22. }
  23. }
  24. Future<ProcessResult> runAsAdmin(String executable, List<String> arguments) async {
  25. String executablePath = shellArgument(executable).replaceAll(' ', r'\\ ');
  26. //executablePath = executablePath.substring(1, executablePath.length - 1);
  27. if (Platform.isMacOS) {
  28. return await Process.run(
  29. 'osascript',
  30. [
  31. '-e',
  32. shellArguments(['do', 'shell', 'script', '$executablePath ${shellArguments(arguments)}', 'with', 'administrator', 'privileges']),
  33. ],
  34. );
  35. } else if (Platform.isWindows) {
  36. return await Process.run(
  37. path.join(Paths.assetsBin.path, "run-as-admin.bat"),
  38. [executable, ...arguments],
  39. );
  40. } else {
  41. // https://blog.csdn.net/weixin_49867936/article/details/109612918
  42. // https://askubuntu.com/questions/287845/how-to-configure-pkexec
  43. return await Process.run("pkexec", [executable, ...arguments]);
  44. }
  45. }