0

ユーザーをサービスとしてログオンできるように昇格させるために使用するカスタム アクションがあります。これは、インストーラー中に実行されます。Windows Server 2012 まで、すべての Windows オペレーティング システムで何年も問題なく動作します。以下のコードをこのバージョンの Windows で実行するとlong、成功のために 0 が返されるのではなく、別のエラー コードが返されます。

LsaAddAccountRights(
        IntPtr PolicyHandle,
        IntPtr AccountSid,
        LSA_UNICODE_STRING[] UserRights,
        long CountOfRights)

問題は、コードが毎回異なるように見え、102938473 などの非常に大きな数になることです。

次のメソッドでエラー コードを実行してエラー コードを取得しましたが、有効なエラー コードではないように見える別の大きな数値が返されます。

LsaNtStatusToWinError(long status)

これらのエラー コードを調べてみましたが、うまくいきませんでした。それらはランダムに生成され、無意味なようです。

返されたエラー コードを無視すると、ユーザーはサービスとして正常にログオンできるように見えます。エラーコードが返されることを除いて、すべてが機能しているように見えます。このエラー コードを無視することもできますが、これが有効なエラーである場合は、今後無視する可能性があります。

追加情報

カスタム アクション内のコードをコンソール アプリケーションでエラーなしで実行できます。それがwixインストーラーの一部である場合にのみ、機能しないようです。

4

2 に答える 2

0

WiX Util 拡張機能のUser 要素を見てみましょう。name 属性はプロパティにすることができます。CreateUser、LogonAsService、および UpdateIfExists 属性を使用して、既存のアカウントを取得し、それに権限を付与できます。あるいは、リファクタリングできるコードが他にもあるかもしれません。

于 2013-08-30T10:30:55.593 に答える
0

C# の LsaAddAccountRights の戻り値の型に問題がある可能性があります。

C# の LsaAddAccountRights の戻り値の型を long から UInt32 に変更することで問題を解決できました。この情報はこちらで見つかりました。この変更は、LsaNtStatusToWinError および LsaClose に対しても行う必要があります。

于 2018-02-13T08:33:47.363 に答える