123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- import 'dart:ffi';
- import 'dart:io';
- import 'package:flutter/services.dart';
- import 'package:process_run/shell.dart';
- import 'package:path/path.dart' as path;
- import 'package:naiyouwl/app/const/const.dart';
- import 'package:naiyouwl/app/utils/logger.dart';
- import 'package:wl_base_help/wl_base_help.dart';
- Future<void> killProcess(String name) async {
- log.debug("kill: ", name);
- if (Platform.isWindows) {
- await Process.run('taskkill', ["/F", "/FI", "IMAGENAME eq $name"]);
- } else {
- await Process.run('bash', ["-c", "ps -ef | grep $name | grep -v grep | awk '{print \$2}' | xargs kill -9"]);
- }
- }
- Future<bool> isRunningAsAdmin() async {
- final Shell shell = Shell();
- try {
- if (Platform.isWindows) {
-
- final List<ProcessResult> results = await shell.run('net session');
- if (results.isNotEmpty && results[0].exitCode == 0) {
- return true;
- }
- } else if (Platform.isMacOS || Platform.isLinux) {
-
- final List<ProcessResult> results = await shell.run('id -u');
- if (results.isNotEmpty && results[0].stdout.trim() == '0') {
- return true;
- }
- }
- } catch (e) {
-
- return false;
- }
- return false;
- }
- Future<bool> killCCoreProcess(int pid) async {
- return Process.killPid(pid);
- }
- Future<ProcessResult> runCCore(String executable, List<String> arguments) async {
- String executablePath = shellArgument(executable).replaceAll(' ', r'\\ ');
- if (Platform.isMacOS) {
- return await Process.run(
- path.join(Paths.assetsBin.path, executablePath),
- [executable, ...arguments],
- );
- } else if (Platform.isWindows) {
- return await Process.run(
- path.join(Paths.assetsBin.path, executablePath),
- [executable, ...arguments],
- );
- } else {
-
-
- return await Process.run("pkexec", [executable, ...arguments]);
- }
- }
- Future<ProcessResult> runCCoreAsAdmin(String executable, List<String> arguments) async {
-
- return await Process.run(
- path.join(Paths.assetsBin.path, "run-as-admin.bat"),
- [executable, ...arguments],
- );
- }
- Future<ProcessResult> runAsAdmin(String executable, List<String> arguments) async {
- String executablePath = shellArgument(executable).replaceAll(' ', r'\\ ');
-
- if (Platform.isMacOS) {
- return await Process.run(
- 'osascript',
- [
- '-e',
- shellArguments(['do', 'shell', 'script', '$executablePath ${shellArguments(arguments)}', 'with', 'administrator', 'privileges']),
- ],
- );
- } else if (Platform.isWindows) {
- return await Process.run(
- path.join(Paths.assetsBin.path, "run-as-admin.bat"),
- [executable, ...arguments],
- );
- } else {
-
-
- return await Process.run("pkexec", [executable, ...arguments]);
- }
- }
- Future<String> platformState() async {
- String platformVersion;
- if(Platform.isWindows){
- try {
- final _wlBaseHelpPlugin = WlBaseHelp();
- platformVersion =
- await _wlBaseHelpPlugin.getPlatformVersion() ?? 'Unknown platform version';
- platformVersion = platformVersion + ClashName.architecture.name;
- } on PlatformException {
- platformVersion = 'Failed to get platform version.';
- }
- return platformVersion;
- }
- else {
- return ClashName.os.name + "-" + ClashName.architecture.name;
- }
- }
- Future<void> onRunAdmin() async {
- if(Platform.isWindows){
- try {
- final _wlBaseHelpPlugin = WlBaseHelp();
- await _wlBaseHelpPlugin.runAsAdministrator();
- } on PlatformException {
- }
- }
- }
- Future<bool> onIsRunAdmin() async {
- bool isAdmin;
- try {
- final _wlBaseHelpPlugin = WlBaseHelp();
- isAdmin = await _wlBaseHelpPlugin.isRunningAsAdmin() ?? false;
- } on PlatformException {
- isAdmin = false;
- }
- return isAdmin;
- }
- Future<bool> onIsProcessRunning(String passName) async {
- bool isRun = false;
- if(Platform.isWindows){
- try {
- final _wlBaseHelpPlugin = WlBaseHelp();
- isRun = await _wlBaseHelpPlugin.isProcessRunning(passName) ?? false;
- if (isRun){
- await onKillProcess(passName);
- }
- } on PlatformException {
- isRun = false;
- }
- }
- return isRun;
- }
- Future<void> onKillProcess(String passName) async {
- try {
- final _wlBaseHelpPlugin = WlBaseHelp();
- await _wlBaseHelpPlugin.killProcess(passName);
- } on PlatformException {
- }
- }
|