2011-09-15 5 views
3

私はすべてのユーザーのためにいくつかの設定をグローバルに保存するアプリケーションに取り組んでいます。これはuserNameパラメータがCFPreferencesSetValueのようにkCFPreferencesAnyUserを渡すことによって行われます。OS X Lionに「すべてのユーザー」環境設定を書き込むにはどうすればよいですか?

OS X 10.7(Lion)より前のバージョンでは正常でした。ただし、このコードをLionで実行すると、アプリケーションが管理者アカウントから実行されていても呼び出しが失敗します。 CFPreferencesSetValue状態のドキュメント:あなたが管理者権限を持っている場合にのみ、「どれユーザー」のための環境設定を保存することができます

注意。

...と私は必要な権限がSnow Leopardのとライオンの間で変更されたことを周りの検索から( 管理者から ルートに)を参照してください。また、

...しっかり特権操作を実行するヘルパーツールをインストールするには...

...私はAppleのSMJobBlessサンプルコードを以下により同様のコードを使用し続けることができるようですただし、kCFPreferencesAnyUserのドキュメントには、それ自身が記載しています:

このドメインは現在サポートされていません。

ヘルパーツールを使用して、すべてのユーザー設定を作成する正しい方法はありますか?それとも、私が使っているはずのサポートされている方法がありますか?

答えて

1

これは実際には非常に良い質問であり、特に良い回答ではないようです。

SMJobBlessには、親アプリケーションと同じ署名でツールにコード署名する必要があるという問題があります。残念ながら、これはシステム環境設定であり、Appleだけがヘルパーツールに必要なコード署名を生成できるようになりました。このことを考えると

は、私は3つの選択肢があると思う:

    • はヘルパーツール(例えばAuthorizationExecuteWithPrivileges)を実行するために、古い許可APIを使用して好み
    • ロールを書くために、スタンドアロンのアプリを使用(prefpane要素プラグインからかのどちらかを使用) - あなたの-好みのAPI

    これのすべてについて最悪の事態はCFPreference APIが共同に失敗するように見えるということです完全に静かに - それは、グローバルな好みの値を設定するときは、実際には何も起こりません。

    EDIT

    申し訳ありません。私は少し前に飛び降りていたと思う。はい、SMJobBlessコードを追加すれば、これを行うことができます。しかし、共有の設定値を読み書きするだけのヘルパーアプリとIPCのコードを書く必要があるのは苦痛です。あなたのニーズが十分に単純な場合は、共有ファイルを使って自分の好みのシステムを動かすほうが簡単かもしれません。

  • +0

    お返事ありがとうございます。私はちょっとあなたがシステム環境設定について何を意味するのか混乱しています。私のアプリケーションの "親アプリケーション"は私のアプリケーションではありませんか?私が書く必要がある設定は、私のアプリケーションに固有のものです。 – Rich

    +1

    私は完全に*黙って失敗するとは思わない。 'CFPreferencesSynchronize'を呼び出すと、エラーが発生したことを示すfalseが返されます。 – Rich

    +1

    'kCFPreferencesAnyUser'ドメインにプリファレンスを書くには、' kCFPreferencesCurrentHost'を使用する必要があります。これは私をしばらくお待ちしています(このページの一番下にあります:https://developer.apple.com/ライブラリ/ mac/documentation/CoreFoundation/Reference/CFPreferencesUtils/Reference/reference.html#// apple_ref/doc/uid/20001450-CH1g-130209) – Matthematics

    関連する問題