2016-12-01 2 views
0

もう一度私のWindowsサービスで作業していて、シェルレジストリエントリ(HKEY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥Windows NT¥CurrentVersion¥Winlogon:Shell)を変更しようとしました。サービス内からレジストリを変更しようとすると、状況によっては失敗しますか?

最初は、SERVICE_CONTROL_STOPが到着したときにServiceControlHandlerルーチンでこれを実行しようとしました。これは、サービスが開始された/停止することによってテスト中に、長い間、ログオンしていました(値が変更されたことがわかりました)。しかし、システムをシャットダウン/リブートするとき、値は変更されませんでした。

次は、ユーザーがログオンまたはログオフしたとき(ServiceControlHandlerのSERVICE_CONTROL_SESSIONCHANGEによってトリガーされたとき)に同じことを試みました。コードが一般的に動作するはずであることを確認するために、私はWTS_SESSTION_LOGOFFとWTS_SESSION_LOCKの場合にキーを修正しようとしました。システムのロック/ロック解除後に値が変更されたことがわかりました。もう一度、私が本当にログオフしたとき、値は変わらなかった。

これが機能しない理由がありますか?

+0

どの 'Reg ...'関数が失敗し、どのエラーコードが返されますか? –

+0

サービスはQt 5.4を使用してコード化されています。この値はQSettings :: setValue()関数によって設定されます。現時点では、コードブロックに(実際のシャットダウン/ログオフの場合)何らかの方法で到達するかどうかを調べようとしています。 –

+1

システムのシャットダウン中に 'SERVICE_CONTROL_STOP'を受け取らないことに気が付きましたか?サービスステータスに 'SERVICE_ACCEPT_SHUTDOWN'ビットを設定した場合にのみ、' SERVICE_CONTROL_SHUTDOWN'を取得します。 –

答えて

1

私はこの動作を時々見たことがあります。「時にはあまりにも遅くなる」のような音です。 soulutionの場合は100%ではありませんが、値を書き込んだ後にQSettings :: sync()を追加しても問題は解決していないようです。

関連する問題