我在Electron应用程序中的Mac上的节点环境中,我需要:
这一切在Windows中都非常容易做到。我在nodejs操作系统模块平台方法上分支,因此如果使用“达尔文”,则需要执行上述操作。
我不是Mac用户,所以我对Mac上的进程了解不多。
如果需要,我可以解析.plist
文件,但是在用户lib首选项文件夹中显示的内容很少。有特定于Photoshop的.psp
首选项文件,但我无法查看其中的内容,而仅检查文件夹中是否有Photoshop文件似乎对我来说很草率,而且我需要获取版本。 / p>
经过研究,我发现了 mac 系统分析器实用程序,该实用程序似乎存在于所有 mac 操作系统上。
使用node
的{{1}}模块,我获得了所有已安装的应用程序以及有关每个应用程序的一些详细信息
TextEdit:
exec
现在,我只需要编写一个简单的解析器即可将335个以上应用程序的结果解析为json以便于查询。
Version: 1.13
Obtained from: Apple
Last Modified: 6/29/18, 11:19 AM
Kind: Intel
64-Bit (Intel): Yes
Signed by: Software Signing, Apple Code Signing Certification Authority, Apple Root CA
Location: /Applications/TextEdit.app
import { exec } from 'child_process';
let proc = exec( 'system_profiler SPApplicationsDataType -detailLevel mini' );
let results = '';
proc.stdout.on( 'data', ( data ) => { results += `${ data }`; } );
proc.on( 'close', async ( code ) =>
{
let parsed = await this.sysProfileTxtToJson( results );
} );
是我的小解析方法
现在sysProfileTxtToJson
是一个json对象,我查询该对象以确定是否安装了photoshop,以及是否有多个版本是最新版本。
这是需要改进的解析方法
parsed
答案 0 :(得分:2)
AppleScript中有一些功能可以用来满足您的要求。考虑通过nodejs 掏空必要的AppleScript / osascript
命令。
首先让我们看一下相关的AppleScript命令...
以下AppleScript代码段返回安装的Photoshop版本的名称(例如Photoshop CS5
,Photoshop CS6
,Photoshop CC
等)。我们需要名称才能成功启动该应用程序。
tell application "Finder" to get displayed name of application file id "com.adobe.Photoshop"
注意:如果未安装 ,则上面的代码段会出错,因此我们也可以利用它来确定是否已安装该应用程序。
以下代码段获取安装的Photoshop版本:
tell application "Finder" to get version of application file id "com.adobe.Photoshop"
这将返回一个长字符串,指示the version。这将是一个虚构的示例:
19.0.1 (19.0.1x20180407 [20180407.r.1265 2018/04/12:00:00:00) © 1990-2018 Adobe Systems Incorporated
在推断出已安装PhotoShop之后,请考虑利用Bash的open
命令启动该应用程序。例如:
open -a "Adobe Photoshop CC"
以下要点演示了如何在节点中使用上述命令。
注意:下面的要点是利用shelljs
的exec
命令来执行AppleScript / osascript命令。但是,您可以改为使用内置child_process.execSync()
或child_process.exec()
的节点。
const os = require('os');
const { exec } = require('shelljs');
const APP_REF = 'com.adobe.Photoshop';
const isMacOs = os.platform() === 'darwin';
/**
* Helper function to shell out various commands.
* @returns {String} The result of the cmd minus the newline character.
*/
function shellOut(cmd) {
return exec(cmd, { silent: true }).stdout.replace(/\n$/, '');
}
if (isMacOs) {
const appName = shellOut(`osascript -e 'tell application "Finder" \
to get displayed name of application file id "${APP_REF}"'`);
if (appName) {
const version = shellOut(`osascript -e 'tell application "Finder" \
to get version of application file id "${APP_REF}"'`).split(' ')[0];
console.log(version); // Log the version to console.
shellOut(`open -a "${appName}"`); // Launch the application.
} else {
console.log('Photoshop is not installed');
}
}