shell.dart 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. try {
  17. // Attempt the "net session" command.
  18. final List<ProcessResult> results = await shell.run('net session');
  19. // Check the exit code of the first result.
  20. if (results.isNotEmpty && results[0].exitCode == 0) {
  21. return true;
  22. }
  23. } catch (e) {
  24. // If any exception is thrown (like ShellException), we assume we don't have admin rights.
  25. return false;
  26. }
  27. return false;
  28. }
  29. Future<ProcessResult> runCCore(String executable, List<String> arguments) async {
  30. String executablePath = shellArgument(executable).replaceAll(' ', r'\\ ');
  31. //executablePath = executablePath.substring(1, executablePath.length - 1);
  32. if (Platform.isMacOS) {
  33. return await Process.run(
  34. 'osascript',
  35. [
  36. '-e',
  37. shellArguments(['do', 'shell', 'script', '$executablePath ${shellArguments(arguments)}', 'with', 'administrator', 'privileges']),
  38. ],
  39. );
  40. } else if (Platform.isWindows) {
  41. return await Process.run(
  42. path.join(Paths.assetsBin.path, executablePath),
  43. [executable, ...arguments],
  44. );
  45. } else {
  46. // https://blog.csdn.net/weixin_49867936/article/details/109612918
  47. // https://askubuntu.com/questions/287845/how-to-configure-pkexec
  48. return await Process.run("pkexec", [executable, ...arguments]);
  49. }
  50. }
  51. Future<ProcessResult> runCCoreAsAdmin(String executable, List<String> arguments) async {
  52. String executablePath = shellArgument(executable).replaceAll(' ', r'\\ ');
  53. return await Process.run(
  54. path.join(Paths.assetsBin.path, "run-as-admin.bat"),
  55. [executable, ...arguments],
  56. );
  57. }
  58. Future<ProcessResult> runAsAdmin(String executable, List<String> arguments) async {
  59. String executablePath = shellArgument(executable).replaceAll(' ', r'\\ ');
  60. //executablePath = executablePath.substring(1, executablePath.length - 1);
  61. if (Platform.isMacOS) {
  62. return await Process.run(
  63. 'osascript',
  64. [
  65. '-e',
  66. shellArguments(['do', 'shell', 'script', '$executablePath ${shellArguments(arguments)}', 'with', 'administrator', 'privileges']),
  67. ],
  68. );
  69. } else if (Platform.isWindows) {
  70. return await Process.run(
  71. path.join(Paths.assetsBin.path, "run-as-admin.bat"),
  72. [executable, ...arguments],
  73. );
  74. } else {
  75. // https://blog.csdn.net/weixin_49867936/article/details/109612918
  76. // https://askubuntu.com/questions/287845/how-to-configure-pkexec
  77. return await Process.run("pkexec", [executable, ...arguments]);
  78. }
  79. }