bla*_*k3r 9 macos bash packagemaker
我需要一种方法来从一个作为我的安装程序的一部分运行的postflight脚本向Login Items添加一个应用程序.它需要在10.5+上工作.优选地,它可以在bash脚本中工作.我的申请已经需要管理权.
我在这里找到的方法:带有参数的Mac OS登录项?似乎是在正确的轨道上(包括在下面)...但是当我在命令行上尝试它并且我不确定如何为所有用户安装或者如果我需要添加逻辑以检查是否在调用此代码之前,它已添加到启动项中.
#!/bin/bash
/usr/bin/osascript -e "tell application \"System Events\" to make new login item with properties { path: \"$1\", hidden:false } at end"
Run Code Online (Sandbox Code Playgroud)
我怀疑我也可以用launchd做点什么.但是,我不确定哪种方法是跨版本兼容性的最佳实践.
注意:我不想在我的应用程序中使用一些objective-c代码添加它.我需要安装程序来添加它. 目前,我所做的是在安装后启动应用程序,然后使用LSSharedFileListRef将其添加到代码中的Login Items ...可以在此处找到该方法的示例:如何在登录时打开应用程序?.这个不合适的原因是我需要在登录屏幕上通过命令行使用Apple Remote Desktop安装我的应用程序.因此,应用程序安装后无需自动启动.
bla*_*k3r 15
以下是我调查和试验过的选项:
这是我使用的方法.通过在postflight中添加以下行,可以很容易地从bash文件中进行操作.
defaults write /Library/Preferences/loginwindow AutoLaunchedApplicationDictionary -array-add '{Path="/Applications/Your Application.app";}'
Run Code Online (Sandbox Code Playgroud)
注意:如果重新安装应用程序,则甚至不必担心添加重复项.loginwindow进程在读取它们时会删除重复项.
我在10.5,10.6和10.7测试了这个
@noa说这对山狮不起作用(10.8),还没有亲自证实.
使用Launch Agent的独特后果是:
以下是您可以用来在bash文件中创建启动代理的一些代码:
cat > /Library/LaunchAgents/com.your.application.agent.plist << EOT
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.your.application.agent</string>
<key>ProgramArguments</key>
<array>
<string>/Applications/Your Application.app/Contents/MacOS/Your Application</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
EOT
Run Code Online (Sandbox Code Playgroud)
我从未真正完成这种方法.显然,这是Novell采用的方法.基本上你是一个基础应用程序,它调用从这个解决方案引用的库: 你如何在登录时打开你的应用程序?
没有试过这个,但根据这篇文章,如果你想让它在虎上工作,你需要使用AppleScript ..?我不能确认或否认,但认为这个链接可能是相关的. 通过AppleScript在Objective-C中编辑Mac OS X登录项
| 归档时间: |
|
| 查看次数: |
9921 次 |
| 最近记录: |