@flun/windows 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,4 @@
1
+ # 变更日志
2
+ ## [2.0.2] - 2026-04-30 14:49
3
+ ### 新包名应用成功通知:
4
+ - 新包名的版本号将延续旧版;
package/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ ISC 开源许可声明
2
+ 版权信息
3
+ 衍生开发 Copyright (c) 2026, flun <cn@flun.top>
4
+
5
+ 本项目(软件包)基于 Schley Andrew Kutz 等作者的原代码进行开发、修改和扩展。
6
+
7
+ 使用条款
8
+ 本软件以“原样”提供,任何人都可以自由地:
9
+
10
+ 使用:用于任何目的,包括商业用途。
11
+
12
+ 修改:根据需要改编代码。
13
+
14
+ 分发:免费或收费地分享原版或修改后的软件。
15
+
16
+ 唯一的条件是:不能从事非法及其它不正当行为,否则由您自行承担全部责任。
17
+
18
+ 免责声明
19
+ 作者对软件的质量不作任何保证。因使用本软件而产生的任何问题(如数据丢失、系统故障等),作者不承担任何责任。
package/README.md ADDED
@@ -0,0 +1,361 @@
1
+ # @flun/windows
2
+
3
+ 本工具库能将您的 Node.js 应用程序作为 Windows 后台服务来运行和管理,支持服务的安装、启动、停止及卸载全流程;还提供事件日志等功能,它主要用于面向生产环境应用程序的部署与运维;如需联系,邮箱: [cn@flun.top](mailto:cn@flun.top)
4
+
5
+ ### 本包基于 ESM 模块系统编写->拥抱未来趋势
6
+
7
+ - **推荐方式**:使用 `import` / `export` 语法,静态分析更友好,工具链兼容性最佳;
8
+ - **兼容方式**:Node.js ≥ 23.5.0 原生支持 `require(esm)`;22.12+ 需开启 `--experimental-require-module` 标志;
9
+ - **重要**:本文档所有示例均采用 **ESM 标准**,请确保你的项目 `package.json` 中已设置 `"type": "module"`,或将脚本后缀改为 `.mjs`;
10
+
11
+ ## 功能概述
12
+
13
+ @flun/windows 提供以下功能:
14
+
15
+ - **服务管理**:将 Node.js 脚本作为原生 Windows 服务运行(含监控功能)
16
+ - **事件日志**:写入 Windows 事件日志
17
+ - **系统命令**:
18
+ - _权限提升_:以管理员权限运行命令(会触发 UAC 确认)
19
+ - _Sudo 执行_:以管理员身份执行命令
20
+ - _权限检测_:检测当前用户是否具有管理员权限
21
+ - _进程列表_:列出运行中的 Windows 进程/服务
22
+ - _终止进程_:通过 PID 终止特定进程
23
+
24
+ ## 安装
25
+
26
+ 推荐通过 npm 全局安装:`npm i -g @flun/windows`
27
+
28
+ 然后在项目根目录执行:`npm link @flun/windows`
29
+
30
+ 局部安装:`npm i @flun/windows`
31
+
32
+ ## 无原生模块依赖
33
+
34
+ Windows 上的原生 Node 模块安装复杂,通常需要 Visual Studio 和 node-gyp 进行编译;@flun/windows **不依赖任何原生模块**,所有二进制工具均已预打包,无需安装 Visual Studio 等编译环境;
35
+
36
+ ---
37
+
38
+ # Windows 服务管理
39
+
40
+ @flun/windows 可将 Node.js 脚本转换为 Windows 服务;注意:创建服务需要管理员权限!!
41
+
42
+ 基础示例:
43
+
44
+ ```js
45
+ import { Service } from '@flun/windows';
46
+
47
+ // 创建服务对象
48
+ const svc = new Service({
49
+ name: 'Hello World',
50
+ description: 'nodejs.org 示例服务器',
51
+ script: 'C:\\path\\to\\helloworld.js',
52
+ nodeOptions: [
53
+ '--harmony',
54
+ '--max-old-space-size=4096'
55
+ ]
56
+ // ===== 其它可选配置 =====
57
+ //, maxRetries: null // 最大重试次数(默认null,表示忽略)
58
+ //, maxRestarts: 3 // 60秒内最大重启次数(默认3)
59
+ //, stoptimeout: 30 // 停止服务超时时间(秒,默认30)
60
+ //, wait: 1 // 重启等待时间(秒,默认1)
61
+ //, scriptOptions: '' // 传递给脚本的参数(默认空字符串)
62
+ //, stopparentfirst: false // 是否先停止父进程(默认false)
63
+ //, abortOnError: false // 遇到错误是否退出进程(默认false)
64
+ //, grow: 0.25 // 重启等待时间增长比例(默认0.25即25%)
65
+ //, logpath: null // 日志文件路径(默认null,使用默认路径)
66
+ //, logmode: 'rotate' // 日志模式('reset', 'roll', 'append')
67
+ //, execPath: process.execPath // Node.js可执行文件路径(默认当前Node)
68
+ //, logOnAs: {} // 服务运行的用户凭据('domain'、'account'、'password'和'mungeCredentialsAfterInstall')
69
+ //, sudo: {enabled:false} // 提升权限配置(是否在Windows启用了sudo,默认没有)
70
+ //, env: undefined // 环境变量(默认:undefined)
71
+ //, logging: null // 日志配置(默认:mode = 'append', pattern = 'yyyMMdd', sizeThreshold = 10240, keepFiles = 8)
72
+ //, allowServiceLogon: undefined // 允许服务登录(默认undefined)
73
+ //, workingDirectory: process.cwd() // 工作目录(默认当前目录)
74
+ });
75
+
76
+ // 监听安装完成事件
77
+ svc.on('install', ()=>{
78
+ svc.start();
79
+ });
80
+
81
+ svc.install();
82
+ ```
83
+
84
+ 服务创建后可通过 Windows 服务管理器、`NET START/STOP` 或 `sc` 命令管理;
85
+
86
+ ### 支持的事件
87
+
88
+ - _install_ - 服务安装完成
89
+ - _alreadyinstalled_ - 服务已存在
90
+ - _invalidinstallation_ - 安装文件不完整
91
+ - _uninstall_ - 卸载完成
92
+ - _alreadyuninstalled_ - 服务未安装
93
+ - _start_ - 服务启动
94
+ - _stop_ - 服务停止
95
+ - _error_ - 发生错误
96
+
97
+ ### 脚本参数传递
98
+
99
+ 通过 `scriptOptions` 配置:
100
+
101
+ ```js
102
+ import { Service } from '@flun/windows';
103
+ const svc1 = new Service({
104
+ ..., // 基本配置略...
105
+ scriptOptions: '-c C:\\config\\special.conf -i'
106
+ });
107
+ ```
108
+
109
+ ### 环境变量设置
110
+
111
+ ```js
112
+ import { Service } from '@flun/windows';
113
+ const svc1 = new Service({
114
+ ..., // 基本配置略...
115
+ env: {
116
+ name: "HOME",
117
+ value: process.env["USERPROFILE"]
118
+ }
119
+ });
120
+
121
+ // 或多个变量
122
+ const svc2 = new Service({
123
+ ..., // 基本配置略...
124
+ env: [{
125
+ name: "HOME",
126
+ value: process.env["USERPROFILE"]
127
+ },{
128
+ name: "TEMP",
129
+ value: path.join(process.env["USERPROFILE"],"/temp")
130
+ }]
131
+ });
132
+ ```
133
+
134
+ ### 指定 Node 执行路径
135
+
136
+ ```js
137
+ import { Service } from '@flun/windows';
138
+ const svc = new Service({
139
+ ..., // 基本配置略...
140
+ execPath: 'C:\\特定路径\\node.exe'
141
+ });
142
+ ```
143
+
144
+ ### 用户账户配置
145
+
146
+ ```js
147
+ import { Service } from '@flun/windows';
148
+ const svc = new Service({
149
+ ..., // 基本配置略...
150
+ });
151
+
152
+ // 安装后指定特定用户或凭据以登录运行
153
+ svc.logOnAs.domain = 'mydomain.local';
154
+ svc.logOnAs.account = 'username';
155
+ svc.logOnAs.password = 'password';
156
+ svc.logOnAs.mungeCredentialsAfterInstall: true // 默认
157
+
158
+ // 显示启用 sudo 提权 (注意!!需要在系统中启用了sudo,然后在这里设置为true,才有效)
159
+ svc.sudo.enabled = true;
160
+ ```
161
+
162
+ ### 服务卸载
163
+
164
+ ```js
165
+ import { Service } from '@flun/windows';
166
+ const svc = new Service({
167
+ ..., // 基本配置略...
168
+ });
169
+ svc.on('uninstall', ()=>{
170
+ console.log('卸载完成');
171
+ console.log('服务是否存在:', svc.exists);
172
+ // svc.exists 返回值说明:
173
+ // 0: 服务和相关文件没有
174
+ // 1: 服务已注册但相关文件不存在(异常情况)
175
+ // 2: 服务未注册但相关文件存在(文件残留)
176
+ // 3: 服务已注册且相关文件存在(正常状态)
177
+ });
178
+
179
+ svc.uninstall();
180
+ ```
181
+
182
+ 注:卸载仅移除服务相关文件,**不会删除您的 Node.js 脚本**;
183
+
184
+ ### 智能重启机制
185
+
186
+ @flun/windows 提供可配置的重启策略:
187
+
188
+ ```js
189
+ import { Service } from '@flun/windows';
190
+ const svc = new Service({
191
+ ..., // 基本配置略...
192
+ wait: 2, // 初始等待时间(秒)
193
+ grow: 0.5, // 等待时间增长比例(50%)
194
+ maxRetries: 5, // 最大重试次数
195
+ maxRestarts: 3 // 60秒内最大重启次数
196
+ });
197
+ ```
198
+
199
+ ### 服务实现原理
200
+
201
+ 使用 [winsw]为每个服务生成独立的 `.exe` 和 `.xml` 配置文件,存储在脚本所在目录的 `daemon` 子文件夹中;服务日志可通过 Windows 事件查看器查看;
202
+
203
+ ---
204
+
205
+ # 事件日志系统
206
+
207
+ @flun/windows 提供非 C++ 依赖的事件日志功能:
208
+
209
+ ```js
210
+ import { EventLogger } from '@flun/windows';
211
+ const eLog1 = new EventLogger('服务名称');
212
+
213
+ eLog1.info('基本信息');
214
+ eLog1.warn('警告信息');
215
+ eLog1.error('错误信息');
216
+ eLog1.auditSuccess('审计成功');
217
+ eLog1.auditFailure('审计失败');
218
+
219
+ // 自定义事件代码
220
+ eLog1.error('特殊事件', 1002, ()=>{
221
+ console.log('日志已写入');
222
+ });
223
+
224
+ // 使用 SYSTEM 日志
225
+ const eLog2 = new EventLogger({
226
+ source: '自定义日志源名称', eventLog: 'SYSTEM'
227
+ });
228
+ ```
229
+
230
+ ---
231
+
232
+ # 系统命令工具
233
+
234
+ ## elevate(权限提升)
235
+
236
+ `elevate` 类似于 Linux/Mac 上的 `sudo`,它会尝试将当前用户的权限提升为本地管理员;但要求当前用户具有管理员权限,若无管理员权限,命令将失败并返回 `access denied` 错误;
237
+
238
+ 系统会弹出 UAC 提示,确认用户是否允许继续;
239
+
240
+ **语法**:`elevate(cmd[, options][, callback])`
241
+
242
+ **示例**:
243
+
244
+ ```js
245
+ import { elevate } from '@flun/windows';
246
+ // 基本用法
247
+ elevate('echo "Hello World" && whoami',{}, (error, stdout, stderr) => {
248
+ if (error) {
249
+ console.error('执行失败:', error);
250
+ } else {
251
+ console.log('执行成功,输出:', stdout);
252
+ console.log('错误输出:', stderr);
253
+ }
254
+ });
255
+
256
+ // 带选项参数
257
+ elevate('echo "Hello World" && whoami', { cwd:'C:\\' }, callback);
258
+
259
+ // 多种参数组合
260
+ elevate('echo "Hello World" && whoami', (err, stdout)=> { }); // options视为回调
261
+ elevate('echo "Hello World" && whoami'); // 无回调
262
+ ```
263
+
264
+ ## sudo(管理员执行)
265
+
266
+ `sudo` 与 Linux/Mac 上的 `sudo` 类似;与 `elevate` 雷同,但稳定性更高,这仍要求用户具有管理员权限,并且需在Windows上启用sudo命令,否则命令将失败;
267
+
268
+ **语法**:`sudo(cmd[, options][, callback])`
269
+
270
+ **参数说明**:
271
+ - `cmd`:要执行的命令
272
+ - `options`(可选):执行选项
273
+ - `callback`(可选):执行完成后的回调函数
274
+
275
+ **示例**:
276
+
277
+ ```js
278
+ import { sudo } from '@flun/windows';
279
+
280
+ // 基本用法 - 命令、选项和回调
281
+ sudo('echo "Hello World" && whoami', {}, (error, stdout, stderr) => {
282
+ if (error) console.error('执行失败:', error);
283
+ else {
284
+ console.log('执行成功,输出:', stdout);
285
+ console.log('错误输出:', stderr);
286
+ }
287
+ });
288
+
289
+ // 带选项参数
290
+ sudo('echo "Hello World" && whoami', {cwd:'C:\\'}, callback);
291
+
292
+ sudo('echo "Hello World" && whoami' ); // 无回调
293
+ ```
294
+
295
+ ## 管理员权限检测
296
+
297
+ 此异步命令用于判断当前用户是否拥有管理员权限;它会向回调函数传递一个布尔值,如果用户是管理员则返回 `true`,否则返回 `false`;
298
+
299
+ **语法**:`isAdminUser(callback)`
300
+
301
+ **示例**:
302
+
303
+ ```js
304
+ import { isAdminUser } from '@flun/windows';
305
+ isAdminUser(isAdmin => {
306
+ if (isAdmin) console.log('当前用户是管理员');
307
+ else console.log('当前用户不是管理员');
308
+ });
309
+ ```
310
+
311
+ ## 进程列表
312
+
313
+ 获取运行中的 Windows 进程/服务列表;
314
+
315
+ ```js
316
+ import { list } from '@flun/windows';
317
+ list(processes => {
318
+ console.log(processes);
319
+ }, true); // true 显示详细信息
320
+ ```
321
+
322
+ ## 终止进程
323
+
324
+ 通过 PID 终止特定进程;
325
+
326
+ ```js
327
+ import { kill } from '@flun/windows';
328
+ kill(进程PID, () => {
329
+ console.log('进程已终止');
330
+ });
331
+ ```
332
+
333
+ ---
334
+
335
+ # 故障排除
336
+
337
+ ## elevate 和 sudo 函数常见问题
338
+
339
+ 1. **sudo 函数执行失败**:这可能是因为 `sudo.exe` 外部工具不兼容当前系统,建议使用 `elevate` 函数作为替代
340
+
341
+ 2. **权限被拒绝**:确保当前用户具有管理员权限,可以运行 `isAdminUser` 函数检查
342
+
343
+ 3. **回调函数未执行**:确保正确传递回调函数,如果不需要回调,可以不传但无法获取执行结果
344
+
345
+ 4. **sudo 函数需要在系统中启用sudo命令**:如果是创建服务实例,还需设置 sudo.enabled为true
346
+
347
+ ## 服务管理常见问题
348
+
349
+ - `invalidinstallation` 错误通常表示 daemon 目录文件不完整
350
+ - 卸载时若文件被锁定,可重新运行卸载或手动删除 `daemon` 目录
351
+
352
+ ---
353
+
354
+ # 致谢!!!
355
+
356
+ 感谢所有贡献者,特别感谢 @arthurblake、@hockeytim11 等开发者的贡献;
357
+
358
+ # 许可证
359
+
360
+ winsw 和 sudowin 遵循各自所有者的许可证;@flun/windows 核心代码采用 ISC 许可证(具体内容请见许可证文档)
361
+ ```
@@ -0,0 +1,25 @@
1
+ Set sh = CreateObject("Shell.Application")
2
+ Set fso = CreateObject("Scripting.FileSystemObject")
3
+
4
+ tmp = fso.GetSpecialFolder(2) ' 获取系统临时目录
5
+ outFile = fso.BuildPath(tmp, "flun_el_output.txt")
6
+ batFile = fso.BuildPath(tmp, "flun_el.bat")
7
+ cmdFile = fso.BuildPath(tmp, "flun_el.cmd")
8
+
9
+ ' 创建文件
10
+ Set batchFile = fso.CreateTextFile(batFile, True)
11
+ batchFile.WriteLine "@echo off"
12
+ batchFile.WriteLine "chcp 65001 > nul"
13
+
14
+ With fso.CreateTextFile(cmdFile, True)
15
+ .WriteLine "@echo off"
16
+ .WriteLine "{command}" ' 实际命令
17
+ .Close
18
+ End With
19
+
20
+ ' 在批处理文件中调用命令文件并重定向所有输出
21
+ batchFile.WriteLine "call """ & cmdFile & """ > """ & outFile & """ 2>&1"
22
+ batchFile.Close
23
+
24
+ ' 执行命令
25
+ sh.ShellExecute "cmd.exe", "/c """ & batFile & """", "", "runas", 0
Binary file
@@ -0,0 +1,6 @@
1
+ <configuration>
2
+ <startup>
3
+ <supportedRuntime version="v2.0.50727" />
4
+ <supportedRuntime version="v4.0" />
5
+ </startup>
6
+ </configuration>
package/copy-files.js ADDED
@@ -0,0 +1,34 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { fileURLToPath } from 'url';
4
+
5
+ // 要复制的文件位置和文件目标位置
6
+ const __filename = fileURLToPath(import.meta.url), __dirname = path.dirname(__filename),
7
+ fileName = 'sevWin.js', targetDir = path.resolve(__dirname, '../..'),
8
+
9
+ // 要拷贝的文件和目标文件路径
10
+ sourceFile = path.join(__dirname, fileName), targetFile = path.join(targetDir, fileName);
11
+
12
+ /**
13
+ * 复制文件到项目根目录
14
+ * >查看定义:@see {@link copyFile}
15
+ * @returns {boolean} - 复制是否成功
16
+ */
17
+ const copyFile = () => {
18
+ console.log(`🔍 检查 ${fileName} 文件...`), console.log(`📁 项目根目录:${targetDir}`);
19
+ try {
20
+ if (fs.existsSync(targetFile)) return true; // 如果目标文件存在,则返回true并结束函数
21
+ console.log(`⚠️ 在项目根目录未找到 ${fileName} 文件,正在创建...`);
22
+
23
+ fs.copyFileSync(sourceFile, targetFile); // 复制源文件到项目根目录
24
+ console.log(`✓ 已创建 ${fileName} 示例文件:${targetFile}`);
25
+ return true;
26
+ } catch (error) {
27
+ console.error(`✗ 创建 ${fileName} 文件失败:`, error.message);
28
+ return false;
29
+ }
30
+ }
31
+
32
+ // 执行脚本并导出函数
33
+ if (process.argv[1] === __filename) copyFile();
34
+ export { copyFile };
package/index.d.ts ADDED
@@ -0,0 +1,129 @@
1
+ import { elevate, sudo, isAdminUser, platform } from './lib/binaries.js';
2
+ import { kill, list } from './lib/cmd.js';
3
+ import { Service } from './lib/daemon.js';
4
+ import { EventLogger } from './lib/eventlog.js';
5
+ import { exec, execSync, fork, promisify, path, fs, EventEmitter, isPermissionError, getDirname } from './lib/shared.js';
6
+ import { generateXml, createExe } from './lib/winsw.js';
7
+
8
+ // =================================== lib/binaries.js ===================================
9
+ /**
10
+ * ```js
11
+ * // 文件导出内容
12
+ * elevate(); // 提升当前进程权限(Windows UAC)
13
+ * sudo(); // 使用sudo.exe提升权限(适用于Windows 10及以上版本)
14
+ * isAdminUser(); // 检查当前用户是否拥有管理员权限
15
+ * platform(); // 获取操作系统平台字符串,用于判断当前运行环境是否为Windows
16
+ * ```
17
+ * >查看定义:@see {@link elevate}、{@link sudo}、{@link isAdminUser}、{@link platform}
18
+ */
19
+ declare module './lib/binaries.js' {
20
+ export * from './lib/binaries.js';
21
+ }
22
+
23
+ // =================================== lib/cmd.js ===================================
24
+ /**
25
+ * ```js
26
+ * // 文件导出内容
27
+ * kill(); // 结束指定PID进程
28
+ * list(); // 列出服务器上正在运行的进程
29
+ * ```
30
+ * >查看定义:@see {@link kill}、{@link list}
31
+ */
32
+ declare module './lib/cmd.js' {
33
+ export * from './lib/cmd.js';
34
+ }
35
+
36
+ // =================================== lib/daemon.js ===================================
37
+ /**
38
+ * ```js
39
+ * // 文件导出内容
40
+ * Service{}; // 服务管理类,提供创建、安装、卸载、启动、停止和查询服务状态等功能
41
+ * ```
42
+ * >查看定义:@see {@link Service}
43
+ */
44
+ declare module './lib/daemon.js' {
45
+ export * from './lib/daemon.js';
46
+ }
47
+
48
+ // =================================== lib/eventlog.js ===================================
49
+ /**
50
+ * ```js
51
+ * // 文件导出内容
52
+ * EventLogger{}; // 事件日志记录器类,用于向Windows事件查看器写入日志
53
+ * ```
54
+ * >查看定义:@see {@link EventLogger}
55
+ */
56
+ declare module './lib/eventlog.js' {
57
+ export * from './lib/eventlog.js';
58
+ }
59
+
60
+ // =================================== lib/shared.js ===================================
61
+ /**
62
+ * 共享模块,导出在多个文件中使用的常用函数和模块
63
+ * ```js
64
+ * // 外部包函数
65
+ * exec(); // 子进程执行命令的函数,提供回调和Promise两种接口
66
+ * execSync; // 子进程执行命令的同步函数,返回命令输出结果
67
+ * fork(); // 创建一个新的Node.js子进程来运行指定的模块,提供与父进程的通信通道
68
+ * promisify(); // 将Node.js回调风格的函数转换为返回Promise的函数
69
+ * 模块:
70
+ * path, fs; // Node.js内置模块,提供文件路径处理、文件系统操作等功能
71
+ * class EventEmitter{}; // Node.js内置模块,提供事件驱动编程的功能,允许对象之间进行事件通信
72
+ * // 自定义函数:
73
+ * isPermissionError(); // 检查错误对象是否表示权限错误的函数,用于判断操作失败是否由于权限不足引起
74
+ * getDirname(); // 获取当前模块目录路径的函数,用于在ES模块环境中替代__dirname变量的功能
75
+ * ```
76
+ * >查看定义:@see {@link exec}、{@link execSync}、{@link fork}、{@link promisify}、{@link path}、{@link fs}、{@link EventEmitter}
77
+ * - 自定义函数:{@link isPermissionError}、{@link getDirname}
78
+ */
79
+ declare module './lib/shared.js' {
80
+ export * from './lib/shared.js';
81
+ }
82
+
83
+ // =================================== lib/winsw.js ===================================
84
+ /**
85
+ * ```js
86
+ * // 文件导出内容
87
+ * generateXml(); // 生成 winsw 配置文件的 XML;
88
+ * createExe(); // 创建 winsw 可执行文件,将 XML 配置文件和 Node.js 脚本打包成一个独立的 Windows 服务可执行文件;
89
+ * ```
90
+ * >查看定义:@see {@link generateXml}、{@link createExe}
91
+ */
92
+ declare module './lib/winsw.js' {
93
+ export * from './lib/winsw.js';
94
+ }
95
+
96
+ // =================================== 模块导出入口 ===================================
97
+ /**
98
+ * Windows功能模块 主要功能:
99
+ * ```js
100
+ * Service{}; // 服务管理类
101
+ * EventLogger{}; // 事件日志记录器类
102
+ * elevate(); // 权限提升(机制:ShellExecute + "runas")
103
+ * sudo(); // 权限提升(机制:sudo.exe)
104
+ * isAdminUser(); // 检查当前用户是否拥有管理员权限
105
+ * kill(); // 结束指定PID进程
106
+ * list(); // 列出服务器上正在运行的进程
107
+ * ```
108
+ * ---
109
+ * >查看定义:@see {@link Service}、{@link EventLogger}、{@link elevate}、{@link sudo}、{@link isAdminUser}、{@link kill}、{@link list}
110
+ * @example
111
+ * // 基础示例
112
+ * import { Service } from '@flun/windows';
113
+ *
114
+ * // 创建服务对象
115
+ * const svc = new Service({
116
+ * name: 'Hello World', // 服务名称
117
+ * description: 'nodejs.org 示例服务器', // 服务描述
118
+ * script: 'C:\\path\\to\\helloworld.js',// 启动服务的入口脚本路径
119
+ *
120
+ * // 传递给node进程的选项
121
+ * nodeOptions: [ '--harmony','--max-old-space-size=4096' ]
122
+ * });
123
+ */
124
+ declare module './index.js' {
125
+ export { elevate, sudo, isAdminUser } from './lib/binaries.js';
126
+ export { kill, list } from './lib/cmd.js';
127
+ export { Service } from './lib/daemon.js';
128
+ export { EventLogger } from './lib/eventlog.js';
129
+ }
package/index.js ADDED
@@ -0,0 +1,9 @@
1
+
2
+ import { platform } from './lib/binaries.js';
3
+ // 平台检查
4
+ if (!platform().startsWith('win')) throw new Error('@flun/windows 仅支持在Windows系统上运行');
5
+
6
+ export { elevate, sudo, isAdminUser } from './lib/binaries.js';
7
+ export { kill, list } from './lib/cmd.js';
8
+ export { Service } from './lib/daemon.js';
9
+ export { EventLogger } from './lib/eventlog.js';