Mac 용 startup parameter 추가
This commit is contained in:
parent
f30156917d
commit
b3f616f0d2
1 changed files with 98 additions and 44 deletions
|
|
@ -25,8 +25,11 @@ class OSStartup {
|
|||
|
||||
//shell file must have '#!/bin/sh'
|
||||
static Future<bool> registStartup(String executableFilePath, String label,
|
||||
{String? logStandardFilePath, String? logErrorFilePath}) async {
|
||||
{List<String>? arguments,
|
||||
String? logStandardFilePath,
|
||||
String? logErrorFilePath}) async {
|
||||
return _current!.registStartup(executableFilePath, label,
|
||||
arguments: arguments,
|
||||
logStandardFilePath: logStandardFilePath,
|
||||
logErrorFilePath: logErrorFilePath);
|
||||
}
|
||||
|
|
@ -44,7 +47,9 @@ class _Startup {
|
|||
|
||||
//shell file must have '#!/bin/sh'
|
||||
Future<bool> registStartup(String executableFilePath, String label,
|
||||
{String? logStandardFilePath, String? logErrorFilePath}) async {
|
||||
{List<String>? arguments,
|
||||
String? logStandardFilePath,
|
||||
String? logErrorFilePath}) async {
|
||||
var c = Completer<bool>();
|
||||
return c.future;
|
||||
}
|
||||
|
|
@ -66,7 +71,7 @@ class _StartupMac extends _Startup {
|
|||
<string>{LABEL}</string>
|
||||
<key>ProgramArguments</key>
|
||||
<array>
|
||||
<string>{FILE_PATH}</string>
|
||||
<string>{FILE_PATH}</string>{PARAMETERS}
|
||||
</array>
|
||||
<key>RunAtLoad</key>
|
||||
<true/>{LOG_STANDARD}{LOG_ERROR}
|
||||
|
|
@ -95,49 +100,53 @@ class _StartupMac extends _Startup {
|
|||
//shell file must have '#!/bin/sh'
|
||||
@override
|
||||
Future<bool> registStartup(String executableFilePath, String label,
|
||||
{String? logStandardFilePath, String? logErrorFilePath}) async {
|
||||
{List<String>? arguments,
|
||||
String? logStandardFilePath,
|
||||
String? logErrorFilePath}) async {
|
||||
var c = Completer<bool>();
|
||||
final tagLabel = '{LABEL}';
|
||||
final tagPath = '{FILE_PATH}';
|
||||
var success = false;
|
||||
ProcessResult? result;
|
||||
|
||||
var enable = true;
|
||||
if (await isRegistedStartup(label)) {
|
||||
enable = await unregistStartup(label);
|
||||
//compose parameters
|
||||
var parameters = '';
|
||||
if (arguments != null) {
|
||||
for (var arg in arguments) {
|
||||
parameters += """
|
||||
|
||||
<string>$arg</string>""";
|
||||
}
|
||||
}
|
||||
|
||||
if (enable) {
|
||||
//create plist in LaunchAgents
|
||||
final plistName = '$label.plist';
|
||||
final userPath = Platform.environment['HOME'];
|
||||
final tagLogStandard = '{LOG_STANDARD}';
|
||||
final tagLogError = '{LOG_ERROR}';
|
||||
var plistContent = plistTemplate
|
||||
.replaceAll(tagLabel, label)
|
||||
.replaceAll(tagPath, executableFilePath);
|
||||
if (logStandardFilePath == null) {
|
||||
plistContent = plistContent.replaceAll(tagLogStandard, '');
|
||||
} else {
|
||||
plistContent = plistContent.replaceAll(
|
||||
tagLogStandard,
|
||||
logStandardTemplate.replaceAll(
|
||||
tagLogStandard, logStandardFilePath));
|
||||
}
|
||||
if (logErrorFilePath == null) {
|
||||
plistContent = plistContent.replaceAll(tagLogError, '');
|
||||
} else {
|
||||
plistContent = plistContent.replaceAll(tagLogError,
|
||||
logErrorTemplate.replaceAll(tagLogError, logErrorFilePath));
|
||||
}
|
||||
var plistFile = File('$userPath/Library/LaunchAgents/$plistName');
|
||||
await plistFile.create();
|
||||
await plistFile.writeAsString(plistContent);
|
||||
|
||||
var result = await ProcessExecutor.run(
|
||||
StringBuffer('chmod +x "$executableFilePath"'));
|
||||
success = result.exitCode == 0;
|
||||
//create plist in LaunchAgents
|
||||
final plistName = '$label.plist';
|
||||
final userPath = Platform.environment['HOME'];
|
||||
final tagLogStandard = '{LOG_STANDARD}';
|
||||
final tagLogError = '{LOG_ERROR}';
|
||||
final tagParameters = '{PARAMETERS}';
|
||||
var plistContent = plistTemplate
|
||||
.replaceAll(tagLabel, label)
|
||||
.replaceAll(tagPath, executableFilePath)
|
||||
.replaceAll(tagParameters, parameters);
|
||||
if (logStandardFilePath == null) {
|
||||
plistContent = plistContent.replaceAll(tagLogStandard, '');
|
||||
} else {
|
||||
plistContent = plistContent.replaceAll(tagLogStandard,
|
||||
logStandardTemplate.replaceAll(tagLogStandard, logStandardFilePath));
|
||||
}
|
||||
if (logErrorFilePath == null) {
|
||||
plistContent = plistContent.replaceAll(tagLogError, '');
|
||||
} else {
|
||||
plistContent = plistContent.replaceAll(tagLogError,
|
||||
logErrorTemplate.replaceAll(tagLogError, logErrorFilePath));
|
||||
}
|
||||
var plistFile = File('$userPath/Library/LaunchAgents/$plistName');
|
||||
await plistFile.create();
|
||||
await plistFile.writeAsString(plistContent);
|
||||
|
||||
var result = await ProcessExecutor.run(
|
||||
StringBuffer('chmod +x "$executableFilePath"'));
|
||||
success = result.exitCode == 0;
|
||||
|
||||
c.complete(success);
|
||||
return c.future;
|
||||
|
|
@ -192,7 +201,9 @@ WantedBy=default.target""";
|
|||
//shell file must have '#!/bin/sh'
|
||||
@override
|
||||
Future<bool> registStartup(String executableFilePath, String label,
|
||||
{String? logStandardFilePath, String? logErrorFilePath}) async {
|
||||
{List<String>? arguments,
|
||||
String? logStandardFilePath,
|
||||
String? logErrorFilePath}) async {
|
||||
var c = Completer<bool>();
|
||||
final tagLabel = '{LABEL}';
|
||||
final tagPath = '{FILE_PATH}';
|
||||
|
|
@ -200,6 +211,11 @@ WantedBy=default.target""";
|
|||
|
||||
var userPath = Platform.environment['HOME'] as String;
|
||||
var systemPath = '$userPath/.config/systemd/user';
|
||||
if (arguments != null) {
|
||||
for (var arg in arguments) {
|
||||
executableFilePath += ' $arg';
|
||||
}
|
||||
}
|
||||
var serviceContent = serviceTemplate
|
||||
.replaceAll(tagLabel, label)
|
||||
.replaceAll(tagPath, executableFilePath);
|
||||
|
|
@ -249,6 +265,13 @@ class _StartupWindows extends _Startup {
|
|||
final windowsStartupPath =
|
||||
'\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\';
|
||||
|
||||
final windowRoamingPath = '\\AppData\\Roaming\\';
|
||||
|
||||
final vbsTemplate = """Set WshShell = CreateObject("WScript.Shell")
|
||||
WshShell.Run chr(34) & "{FILE_PATH}"{PARAMETERS} & Chr(34), 0
|
||||
Set WshShell = Nothing
|
||||
""";
|
||||
|
||||
@override
|
||||
Future<bool> isRegistedStartup(String label) async {
|
||||
var c = Completer<bool>();
|
||||
|
|
@ -273,19 +296,42 @@ class _StartupWindows extends _Startup {
|
|||
//shell file must have '#!/bin/sh'
|
||||
@override
|
||||
Future<bool> registStartup(String executableFilePath, String label,
|
||||
{bool? overwrite = true,
|
||||
{List<String>? arguments,
|
||||
String? logStandardFilePath,
|
||||
String? logErrorFilePath}) async {
|
||||
var c = Completer<bool>();
|
||||
var file = File(executableFilePath);
|
||||
ProcessResult? result;
|
||||
//For Windows 8, 10
|
||||
var fileName = path.basename(file.path);
|
||||
var extension = path.extension(fileName);
|
||||
var userPath = Platform.environment['UserProfile'];
|
||||
var symbolicPath = '$userPath$windowsStartupPath$label$extension';
|
||||
|
||||
//compose vbs content
|
||||
var parameters = '';
|
||||
if (arguments != null) {
|
||||
for (var arg in arguments) {
|
||||
parameters += '" $arg"';
|
||||
}
|
||||
}
|
||||
var vbsContent = vbsTemplate
|
||||
.replaceAll('{FILE_PATH}', executableFilePath)
|
||||
.replaceAll('{PARAMETERS}', parameters);
|
||||
|
||||
//create vbs file
|
||||
var vbsInstallDir = Directory('$userPath$windowRoamingPath$label');
|
||||
if (!await vbsInstallDir.exists()) {
|
||||
await vbsInstallDir.create(recursive: true);
|
||||
}
|
||||
var vbsFile = File(path.join(vbsInstallDir.path, '$label.vbs'));
|
||||
if (await vbsFile.exists()) {
|
||||
await vbsFile.delete();
|
||||
}
|
||||
await vbsFile.create();
|
||||
await vbsFile.writeAsString(vbsContent);
|
||||
|
||||
//create symbolic
|
||||
var symbolicPath = '$userPath$windowsStartupPath$label.vbs';
|
||||
result = await ProcessExecutor.run(
|
||||
StringBuffer('mklink "$symbolicPath" "$executableFilePath"'));
|
||||
StringBuffer('mklink "$symbolicPath" "${vbsFile.path}"'));
|
||||
c.complete(result.exitCode == 0);
|
||||
return c.future;
|
||||
}
|
||||
|
|
@ -296,6 +342,14 @@ class _StartupWindows extends _Startup {
|
|||
var success = false;
|
||||
//For Windows 8, 10
|
||||
var userPath = Platform.environment['UserProfile'];
|
||||
|
||||
//delete vbs file
|
||||
var vbsInstallDir = Directory('$userPath$windowRoamingPath$label');
|
||||
if (await vbsInstallDir.exists()) {
|
||||
await vbsInstallDir.delete(recursive: true);
|
||||
}
|
||||
|
||||
//delete shorcut file
|
||||
var startupDir = Directory('$userPath$windowsStartupPath');
|
||||
var files = startupDir.listSync();
|
||||
for (var fileEntry in files) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue