_access関数が EACCES エラーとなる問題があり、識者の方、どうか
ご教授願います。
<環境>
・Windows2000 Pro
・VC++ 6.0
事象の説明を以下にします。
A、B、Cの3つのプログラムがあります。
A:サービスから起動されるプログラム
B:Aから CreateProcess関数により起動される。
Cを CreateProcess関数により起動する。
C:Bから CreateProcess関数により起動される。
_access関数で、ネットワーク上の別のマシンの共有されている
フォルダをアクセスする。
上記の環境で、A→B→Cと起動し、Cがネットワーク上の別のマシンを
アクセスしようとすると EACCES のエラーになります。
(EACCES は errno.h で定義されています。)
しかし、サービスのAからではなく、Bから起動した場合は正常に
アクセスできます。
C単体でもOKでした。
A、B共に、CreateProcess関数の第3、4パラメータのセキュリティ関連の
パラメータには NULL を指定しています。
サービスの何らかの情報を継承しているのでしょうか。
回避策、アドバイスなど、よろしくお願いします。
No.3ベストアンサー
- 回答日時:
#1です。
ダイアログを表示する必要があったんですね。
別のユーザでサービスログインした場合には、ログインしているユーザとは別の
ウィンドウステーションでウィンドウが作成される為そのままではダイアログ
は見えなくなります。
対処方法としては
1.Dialogを表示する際にデスクトップのウィンドウステーションを取得し、割り当てる
2.ローカルシステムアカウントで起動しCreateProcessAsUserで子プロセスを起動する。
等が考えられます。
いろいろとアドバイス、ありがとうございました。
私も CreateProcessAsUser関数を見つけて、実行しようとしたのですが、
その前の LogonUser関数がエラーに。。。
どうやら「特権」がポイントらしいのですが、、、
ヘルプを見ながら頑張ってみます。
#それにしても、ヘルプの記述は理解しにくい。。。
今回は本当にありがとうございました。
No.2
- 回答日時:
サービスはLocalSystemアカウント権限で動いていて、この権限がまた変なので、困ったものです。
NT上では、ランタイム関数のファイル系はいい加減なことを言うときもあるので、APIにしたほうがいいですよ。
そりゃ、SecurityDiscriptorは複雑で意味不明ですけど。
サービスプロセスが作ったプロセスはサービスプロセスで動くので、ユーザーの権限では動いていません。
lpSecurityAttributesにNULLを指定しても、ハンドルが継承されないだけで、アクセス権や所有者については親から継承されてしまいます。
Cのランタイム関数は、プロセスがNT上で何かを処理する権限うんぬんで動いていないので、当てにしないほうがいいですよ。
最近プロセスとかスレッドとか勉強中の、はぽるんでした。
No.1
- 回答日時:
恐らくサービスで起動しているプログラムAに設定してあるログオンユーザに
別のマシンを参照する権限がないんじゃないでしょうか?
サービスのログオンの設定をローカルシステムアカウントを使用せずに
明示的にアカウントを指定してみてはどうでしょうか。
この回答への補足
素早い回答ありがとうございました。
しかしながら、次なる問題に悩まされています。。。
Aのサービスにおいて、「アカウント」を指定しました。
しかし、Bが正常に動作しませんでした。
プロセスとしては存在していましたが、ダイアログが表示されませんでした。
(BはダイアログベースのEXEです)
推測ですが、、、
変更前は「ローカルシステムアカウント」を指定して、さらに
「デスクトップとの対話をサービスに許可」もチェックされていました。
「アカウント」指定したことにより、
「デスクトップとの対話をサービスに許可」という設定ではなくなり、
ダイアログが表示されなかったのでしょうか?
ネットワーク間アクセスするには「アカウント」指定する。
しかし、「アカウント」指定するとダイアログが表示されない。。。
ご迷惑をおかけしますが、何かよい解決策があればアドバイスお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでWorkbook.addの使い方 3 2023/02/01 11:58
- Access(アクセス) こんにちは。Accessのことで教えてください。M365環境で、Private Declare Fu 1 2023/01/09 14:59
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- Windows 10 Windows Updateが動作しません 7 2022/08/12 16:26
- フリーソフト DVDshrink メモリリソースが足りません。 2 2022/08/16 23:22
- フリーソフト DVDshrink メモリリソースが足りません。 1 2022/08/16 23:17
- その他(プログラミング・Web制作) Pythonの作業環境・作業フォルダの迅速な設定・指定方法 3 2022/04/01 07:55
- その他(ブラウザ) このページは動作していません HTTP ERROR 401 2 2022/11/28 12:11
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、写真のプログラムをどう直せ 2 2022/07/09 21:13
- ドメイン・サーバー・クラウドサービス FileZillaを使用してwpXサーバーに接続できない 2 2022/03/29 21:02
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
shell関数について
-
VBでExcelが起動されているか知...
-
VB6 二重起動確実防止について
-
ラズパイ3でsocket接続できない。
-
CGIでinit.dで起動したプロセス...
-
ソフトのインストール場所って...
-
Macの手書き漢字入力ツールにつ...
-
exeファイルの実行結果をテキス...
-
誰かにサーバにあるデータを消...
-
ご教授願います PC初心者です。...
-
CPUとOS の違いは?
-
PC/AT互換機は、ほとんどのPCの...
-
Windows95の盛り上がりぶりは何...
-
aptでインストールしたプログラ...
-
Win7でコンピュータ名変更を自動で
-
Sendmail のログの見方について
-
デバッグ停止中 一つ戻る
-
ある特定のフォルダの中に、2つ...
-
今から始めるならどのLINUX?
-
USBオーディアダプタとオーディ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチスクリプト処理でエラー...
-
バッチファイルで多重起動を防ぐ
-
VBでExcelが起動されているか知...
-
Linux環境変数設定(putenv?se...
-
コンソールアプリの起動結果待...
-
MySQLへのDB::connectで、faile...
-
VB6 二重起動確実防止について
-
「応答なし」の状態を監視する方法
-
_access関数が EACCES エラーと...
-
shell関数について
-
コンソールアプリケーションの...
-
仮想メモリ増加
-
CreateProcessでコンソールアプ...
-
Open Office Org 急に起動しな...
-
CreateProcessでうまくexeファ...
-
apache2.2が起動せず困っていま...
-
外部プログラムの起動と監視
-
CPUの使用率が100%から戻りま...
-
PostgreSQLについて
-
XDRIVEのログインをSENDKEYで自...
おすすめ情報