MacOSX (Qt および C++ を使用) 用のインストーラー/オートアップデーター アプリケーションを作成しています。アプリ フォルダー内の古いファイルを上書きするには、エスカレートされた権限が必要です。
私のエスカレーション コードは次の例に基づいています 。
void MainDialog::EscalatePrivileges()
{
AuthorizationRef authorizationRef;
OSStatus status;
status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &authorizationRef);
char* tool = QApplication::instance()->applicationFilePath().toLocal8Bit().data();
char* args[] = { "STARTUPDATE", NULL };
FILE* pipe = NULL;
status = AuthorizationExecuteWithPrivileges(authorizationRef, tool, AuthorizationFlagDefaults, args, &pipe);
QApplication::instance()->quit();
}
ただし、エラー -60031 (ツールの起動に失敗しました) が発生します。質問:
a) なぜこれが失敗するのですか? 作業フォルダが正しく設定されていないためだと思います...?(どうにかツールの作業フォルダを設定できませんか?)
編集: わかりました、それを理解しました: args[] - 配列自体は NULL で終了する必要があります。上記のコードですでに修正されています。
b) 他のインターネット ソースによると、関数 AuthorizationExecuteWithPrivileges は非推奨であり、セキュリティ上の懸念から使用すべきではありません。誰かがこれをより良い方法で行う方法の例を挙げてもらえますか?