Flutter Windows服务支持插件dart_windows_service_support的使用

Flutter Windows服务支持插件dart_windows_service_support的使用

dart_windows_service_support 插件使用 dart:ffi 访问 DLL API。

需要 WindowsServiceDLL.dll 支持。下载文件可从 https://github.com/au-top/dart_windows_service/releases 下载,或者克隆 Git 仓库来构建项目。

示例

示例全局变量

final dllPath = normalize(join(dirname(Platform.script.toFilePath()), "../../../dll/WindowsServiceDLL64.dll"));
const serviceName = "dart_test_service";

安装服务

void main(List<String> args) {
  final dartConnectServiceDLL = DartConnectServiceDLL(dllPath);
  final servicePath = join(Directory.current.path, "service.exe");

  dartConnectServiceDLL.dartInstallService(
    serviceName.toNativeUtf16().cast<Uint16>(),
    serviceName.toNativeUtf16().cast<Uint16>(),
    "this is a dart test service".toNativeUtf16().cast<Uint16>(),
    "".toNativeUtf16().cast<Uint16>(),
    0x2,
    "".toNativeUtf16().cast<Uint16>(),
    Pointer.fromAddress(0),
    Pointer.fromAddress(0),

    /// 路径
    servicePath.toNativeUtf16().cast<Uint16>(),
    1,
    1,
    Pointer.fromAddress(0),
    1,
  );
}

连接服务

void main(List<String> args) async {
  final dartConnectServiceDLL = DartConnectServiceDLL(dllPath);
  await Isolate.spawn(run, 'message');
  dartConnectServiceDLL.dartConnectService(serviceName.toNativeUtf16().cast<Uint16>());
}

void run(String message) {
  Timer.periodic(Duration(seconds: 1), (timer) async {
    final f = File("d:/a.txt");
    await f.create();
    await f.writeAsString("${await f.readAsString()}1");
  });
}

卸载服务

void main(List<String> args) {
  final dartConnectServiceDLL = DartConnectServiceDLL(dllPath);
  dartConnectServiceDLL.dartUninstallService(serviceName.toNativeUtf16().cast<Uint16>());
}

更多关于Flutter Windows服务支持插件dart_windows_service_support的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter Windows服务支持插件dart_windows_service_support的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用dart_windows_service_support插件来创建Windows服务的示例代码和步骤。请注意,dart_windows_service_support是一个假设的插件名称,用于说明目的,实际中可能不存在这个确切名称的插件。不过,许多概念和步骤是通用的,并可以应用于类似的插件。

前提条件

  1. Flutter SDK 已安装并配置好环境变量。
  2. Visual Studio 安装并配置了Windows桌面开发的工作负载。
  3. Dart VM 和相关依赖已正确配置。

步骤一:创建Flutter项目

首先,创建一个新的Flutter项目:

flutter create my_windows_service
cd my_windows_service

步骤二:添加Windows平台支持

确保项目包含Windows平台支持:

flutter config --enable-windows-desktop

步骤三:添加插件依赖

假设存在一个名为dart_windows_service_support的插件,可以在pubspec.yaml文件中添加依赖(实际中请替换为真实存在的插件):

dependencies:
  flutter:
    sdk: flutter
  dart_windows_service_support: ^1.0.0  # 假设版本号

然后运行flutter pub get来获取依赖。

步骤四:编写服务代码

lib目录下创建一个新的Dart文件,例如windows_service.dart,并编写服务逻辑。这里是一个简化的示例:

import 'package:dart_windows_service_support/dart_windows_service_support.dart';

class MyWindowsService extends WindowsService {
  @override
  void onStart(ServiceStartArguments args) {
    print('Service started with arguments: $args');
    // 在这里添加服务启动时需要执行的代码
  }

  @override
  void onStop() {
    print('Service stopped');
    // 在这里添加服务停止时需要执行的代码
  }

  @override
  void onPause() {
    print('Service paused');
    // 在这里添加服务暂停时需要执行的代码
  }

  @override
  void onContinue() {
    print('Service continued');
    // 在这里添加服务继续时需要执行的代码
  }

  @override
  void onShutdown() {
    print('Service shutting down');
    // 在这里添加服务关闭时需要执行的代码
  }
}

void main() {
  runWindowsService<MyWindowsService>();
}

步骤五:配置Windows服务

windows目录下,可能需要创建一个CMakeLists.txt或修改现有的配置文件来支持服务安装和运行。这部分通常依赖于具体插件的文档和配置要求。

步骤六:编译和运行服务

使用Flutter工具编译Windows桌面应用,并将其作为服务安装和运行。这通常涉及到一些命令行工具或脚本,具体取决于插件的支持。

假设插件提供了安装服务的命令,可能如下所示:

flutter pub run dart_windows_service_support:install

启动服务:

flutter pub run dart_windows_service_support:start

停止服务:

flutter pub run dart_windows_service_support:stop

注意事项

  1. 权限:安装和运行Windows服务通常需要管理员权限。
  2. 日志:服务运行时的日志可能需要通过Windows事件查看器或其他日志机制来查看。
  3. 调试:调试Windows服务可能比较复杂,可以使用附加到进程的调试器或输出日志到文件来辅助调试。

结论

以上是一个简化的示例,展示了如何在Flutter项目中添加和使用dart_windows_service_support(假设插件)来创建Windows服务。实际开发中,请根据具体插件的文档和API进行调整和扩展。如果实际中没有找到满足需求的插件,可能需要考虑使用原生代码(C#、C++等)来创建Windows服务,并通过Dart FFI(外部函数接口)与之交互。

回到顶部