2

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 は非推奨であり、セキュリティ上の懸念から使用すべきではありません。誰かがこれをより良い方法で行う方法の例を挙げてもらえますか?

4

2 に答える 2