0

loginItems によって実行される xpcservices を使用して、os x アプリケーションのプロジェクトを作成します。つまり、サービスはアプリのパス {APP_NAME}.app/Contents/Library/LoginItems に作成され、サービスの実行を担当するのはメイン アプリです。

NSXPCConnection *connection = [[NSXPCConnection alloc] initWithLoginItemName:@"{SERVICE_NAME}.app" error:&error]; 

インストールしたすべてのファイルを削除するために、アンインストーラーを作成しました。サービスを削除する必要があります。私がそれに使用したコマンド:

launchctl remove SERVICE_NAME

これは、ターミナルから実行すると正常に動作しますが、スクリプトから実行すると、「アクティビティ モニター」からサービスが削除されますが、サービスはまだステータス -5 の launchctl リストにあります。したがって、新しいバージョンをインストールすると、インストールされた以前のバージョンが使用されます。

スクリプトを xcode から実行しますNSTask。エラーはありません。それはスクリプトがすべきことをします。管理者権限も設定しました:

/usr/bin/osascript -e 'do shell script \"SCRIPT_NAME args 2>&1 etc\" with administrator privileges'

ターミナルで行ったように削除しないのはなぜですか?

ps:Xcodeから実行すると機能します(アプリがリリースモードであっても)

4

1 に答える 1

0

ログイン項目を正しく削除するには、コードでそれを行う必要があります: に false を渡しますSMLoginItemSetEnabled:

SMLoginItemSetEnabled((__bridge CFStringRef)loginItemBundleId, false)
于 2016-01-26T09:35:37.673 に答える