質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Windowsサービス

Windowsサービスは、Windows NTベースの管理システム上のService Control Managerによって走るバックグラウンドサービス処理で、daemonやUNIXサービスに類似しています。

Q&A

解決済

2回答

5590閲覧

Windowsサービスに登録したプログラムで共有フォルダにアクセスしたい

tkd00

総合スコア6

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Windowsサービス

Windowsサービスは、Windows NTベースの管理システム上のService Control Managerによって走るバックグラウンドサービス処理で、daemonやUNIXサービスに類似しています。

0グッド

0クリップ

投稿2021/08/01 07:06

前提・実現したいこと

Windowsサービスにプログラム(ruby)を登録しました(sc create)。
プログラムの中身は共有フォルダにアクセスする処理を含んでいます。
共有フォルダのipアドレス、ユーザー名、パスワードは資格情報マネージャーに登録してあります。

発生している問題・エラーメッセージ

Windowsサービス経由でプログラムを起動した場合共有フォルダのファイルにアクセスできません。以下エラーが発生します。

Invalid argument @ rb_sysopen - //192.168.XXX.XXX/test/test.txt (Errno::EINVAL)

該当のソースコード

ruby

1test_log = open("//192.168.XXX.XXX/test/test.txt").read

試したこと

・直接プログラムを起動した場合は共有フォルダにアクセスできます。エラーは発生しません。
・ネットワーク上に存在しないipにアクセスしようとすると、別の以下エラーが発生します。

No such file or directory @ rb_sysopen - //192.168.XXX.YYY/test/test.txt (Errno::ENOENT)

・共有フォルダのファイルにアクセスする処理(File.open("//192..."))の前に
system("net use //192.168.XXX.XXX/test PASSWORD /user USERNAME")
の処理を加えるとWindowsサービス経由でもアクセス可能になります。

補足情報(FW/ツールのバージョンなど)

ruby 2.5.1
Windows 10

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

共有フォルダのipアドレス、ユーザー名、パスワードは資格情報マネージャーに登録してあります。

資格情報マネージャの情報はユーザ単位なので、サービスを実行するユーザーの資格情報マネージャに登録するか(「ローカルシステムアカウント」にどうやって登録するかは知りません)、登録してあるユーザーでサービスを動かす(サービスのプロパティーから設定)か。

・共有フォルダのファイルにアクセスする処理(File.open("//192..."))の前に

system("net use //192.168.XXX.XXX/test PASSWORD /user USERNAME")
の処理を加えるとWindowsサービス経由でもアクセス可能になります。

これで何か問題があるのでしょうか?

投稿2021/08/01 07:57

otn

総合スコア85766

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tkd00

2021/08/02 01:14

登録してあるユーザーからサービスを動かすように設定したら、共有フォルダにアクセスできました。ありがとうございます! net useコマンドを使うと、動作が不安定になると記載のある記事がいくつかあったため、なるべく使用したくないと思っていました。
otn

2021/08/02 09:09

> net useコマンドを使うと、動作が不安定になると記載のある記事がいくつかあったため、 おそらく間違った使い方をした場合のことだと思います。
tkd00

2021/08/04 11:19

net useについても、もう少し調べてみようと思います。 ご回答ありがとうございました!
guest

0

ベストアンサー

サービスを実行しているアカウントが共有フォルダへのアクセス権が無いのでは無いでしょうか
参考画像

こちらの記事など参考になるでしょうか
https://www.atmarkit.co.jp/ait/articles/0905/08/news095.html

投稿2021/08/01 07:18

odataiki

総合スコア969

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tkd00

2021/08/02 01:11

サービスのプロパティからアカウントにローカルユーザーを設定したら、共有フォルダにアクセスできました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問