更新:はBLAuthentication
は仕事をしながら、反する、AuthorizationExecuteWithPriviledges
と呼ばれる古い、そして非常に非推奨の機能を利用して、まだ参照のためにこの答えを使用している人々を更新するには現代のセキュリティパラダイムであり、非難されています(しばらくありました)。 Mac OS X Lion用に開発している場合は、ServicesManagementフレームワークを使用して、ヘルパーツールとしての権限を持つコードを実行できるようになります。
特権ヘルパーツールを作成して起動する方法については、私の質問Writing a Privileged Helper Tool with SMJobBless()を参照してください。あなたはBLAuthentication
クラスで管理者認証の下で実行標準mv
とcp
ツールを使用してになりますので
は、NSFileManager
を承認する本当の簡単な方法はありません。残念ながら、元の著者のウェブサイトはダウンしていますが、クラスのコピーをGoogle上に簡単に見つけることができます(必要に応じてコピーをアップロードすることもできます)。上記のコードは、管理者のパスワードの入力を要求し、5のデフォルトの時間制限のためのプログラムを認証します
#define MOVE @"/bin/mv"
if (![[BLAuthentication sharedInstance] isAuthenticated:MOVE]) {
[[BLAuthentication sharedInstance] authenticate:MOVE];
}
NSArray *arguments = [NSArray arrayWithObjects:@"location1", @"location2", nil];
[[BLAuthentication sharedInstance] executeCommand:MOVE withArgs:arguments];
:BLAuthentication
で
は、何をやろうとしていることは、このような何かを行きます分。
WARNING
はもちろん、常にシステムファイルに注意してください!可能であれば、移動や操作を避けてください。特に、プログラムが他の誰かのコンピュータ上で実行されるような場合(何かがうまくいかない場合、あなたは非難されるでしょう)!
私は実際に投稿を感謝します!だから私はまだNSFileManagerクラスを使用することができますか、または今から "mv"コマンドを使用しなければなりませんか?ところで、あなたが私のためにそれをアップロードすることができれば素晴らしいでしょう!ありがとう!!!! – lab12
さて、BLAuthenticationクラスを見つけて、それが2001年であったことに気付きました。それが10年前のようなものであれば、まだ動作しますか?また、どのようにNSTaskの部分を実装するかに関する情報を提供できますか? – lab12
Kevin、いくつかのことを明確にする:a)通常のファイルの場合、引き続き 'NSFileManager'を使うことができますが、rootアクセスの場合は上記のように' BLAuthentication'を使います。 b)申し訳ありませんが、私の間違い。あなたは 'NSTask'を必要としません(私はコードと共に私の答えのその部分を更新するのを忘れましたが、今は修正されています)。コマンドへのパス(@ "/ bin/cp"または@ "/ bin/mv")と一緒に '-executeCommand:withArgs:'を使用して、移動/コピー操作を実行してください。c)はい、 'BLAuthentication'は* old *ですが、まだコンパイルされ、10.6以下であっても完璧に正常に動作します(セキュリティフレームワークはほとんど変化しません)。 –