C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.69624 の関連記事表示

<< 0 >>
■69624  Windowサービスからキックされるアプリ
□投稿者/ けんけん -(2014/01/15(Wed) 11:49:18)

    分類:[.NET 全般] 

    開発環境:VB2010
    OS:WinXP SP3

    処理の概要としましては、上記環境にてWindowsサービスを作成しそのサービス内で、上記環境で作成した
    Windowsアプリケーションをキックし、Windowsアプリ内でフォルダの存在確認をしております。
    現象としましては、Windowsアプリ内でローカルフォルダの存在確認をした場合は、正常にフォルダ有無が取得できて
    おりますが、ネットワークパスを指定するとフォルダの有無が取得できません。
    ※ネットワークドライブ、IP指定、コンピュター名のどれを指定しても取得できません。
    別EXEから上記Windowsアプリをキックした場合は、正常にフォルダ有無の取得ができます。
    (ネットワークパスのOS:WinXP SP3)

    何か原因が考えられるのでしょうか。
    下記にソースを記述します。

    '↓サービス側↓
    Protected Overrides Sub OnStart(ByVal args() As String)
    ' サービスを開始するコードをここに追加します。このメソッドによって、
    ' サービスが正しく実行されるようになります
    ' ProcessStartInfo の新しいインスタンスを生成する
    Dim hPsInfo As New System.Diagnostics.ProcessStartInfo()

    ' 起動するアプリケーションを設定する
    hPsInfo.FileName = "HamadaService_EXE.exe"

    '' コマンドライン引数を設定する
    'hPsInfo.Arguments = (i + 1).ToString

    ' 新しいウィンドウを作成するかどうかを設定する (初期値 False)
    hPsInfo.CreateNoWindow = False

    ' シェルを使用するかどうか設定する (初期値 True)
    hPsInfo.UseShellExecute = True

    ' 起動できなかった時にエラーダイアログを表示するかどうかを設定する (初期値 False)
    hPsInfo.ErrorDialog = False

    ' アプリケーションを起動する時の動詞を設定する
    hPsInfo.Verb = "Open"

    ' 起動ディレクトリを設定する
    hPsInfo.WorkingDirectory = "C:\Development\TEST\HamadaService_EXE\HamadaService_EXE\bin\Debug"

    ' 起動時のウィンドウの状態を設定する
    hPsInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal '通常

    ' ProcessStartInfo を指定して起動する
    System.Diagnostics.Process.Start(hPsInfo)

    End Sub
    '↑サービス側↑

    '↓Windowsアプリ↓
    Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
    Dim strLogPath As String = Path.Combine(My.Application.Info.DirectoryPath, "LOG")
    LOG = New OperationLog(strLogPath, "TRUE", 30)
    If Not Directory.Exists(strLogPath) Then
    Directory.CreateDirectory(strLogPath)
    End If
    Call LOG.Start()
    Call LOG.ScreenStart(Me.Text)

    Dim strDir As String = "\\128.167.89.169\R"
    'Dim strDir As String = "\\128.167.89.137\共有"
    'Dim strDir As String = "V:\"
    LOG.Write(1, strDir)
    If Directory.Exists(strDir) Then
    'If Directory.Exists("C:\hamada") Then
    LOG.Write(0, "ファイルあり")
    Else
    LOG.Write(0, "ファイルなし")
    End If


    End Sub
    '↑Windowsアプリ↑


親記事 /過去ログ119より / 関連記事表示
削除チェック/

■69625  Re[1]: Windowサービスからキックされるアプリ
□投稿者/ shu -(2014/01/15(Wed) 11:54:34)
    No69624 (けんけん さん) に返信

    サービス起動ユーザーに該当ネットワークフォルダへのアクセス権が
    ないのではないでしょうか?
    net useとかAPIでネットワークフォルダアクセスの為に認証をする
    必要があると思われます。
記事No.69624 のレス /過去ログ119より / 関連記事表示
削除チェック/

■69626  Re[2]: Windowサービスからキックされるアプリ
□投稿者/ けんけん -(2014/01/15(Wed) 12:02:21)
    No69625 (shu さん) に返信
    > ■No69624 (けんけん さん) に返信
    >
    > サービス起動ユーザーに該当ネットワークフォルダへのアクセス権が
    > ないのではないでしょうか?
    > net useとかAPIでネットワークフォルダアクセスの為に認証をする
    > 必要があると思われます。

    ご回答ありがとうございます。
    上記Windowsアプリケーションを単体で起動させた場合、フォルダ有無は取得できているのですが
    その場合でも認証が必要なのでしょうか。
記事No.69624 のレス /過去ログ119より / 関連記事表示
削除チェック/

■69627  Re[3]: Windowサービスからキックされるアプリ
□投稿者/ shu -(2014/01/15(Wed) 13:22:21)
    No69626 (けんけん さん) に返信

    > ご回答ありがとうございます。
    > 上記Windowsアプリケーションを単体で起動させた場合、フォルダ有無は取得できているのですが
    > その場合でも認証が必要なのでしょうか。
    Windowsログインユーザとサービス実行ユーザは異なる可能性が高いのでWindowsログインユーザに
    権限があってもサービス実行ユーザには権限がない可能性があります。
記事No.69624 のレス /過去ログ119より / 関連記事表示
削除チェック/

■69631  Re[3]: Windowサービスからキックされるアプリ
□投稿者/ 魔界の仮面弁士 -(2014/01/15(Wed) 14:10:07)
    No69626 (けんけん さん) に返信
    > 上記Windowsアプリケーションを単体で起動させた場合、フォルダ有無は取得できているのですが
    > その場合でも認証が必要なのでしょうか。

    サービスで使用されるアカウントは、何をお使いですか?
    http://salaryman-life.blogspot.jp/2011/03/local-system.html


    もう一つ。自動起動でサービスを利用する場合、ネットワーク サービスがまだ初期化されておらず、
    リモート サーバーの名前を DNS を介して解決できないというケースもあると聞いたことがあります。
記事No.69624 のレス /過去ログ119より / 関連記事表示
削除チェック/

■69632  Re[4]: Windowサービスからキックされるアプリ
□投稿者/ けんけん -(2014/01/15(Wed) 14:14:52)
    No69631 (魔界の仮面弁士 さん) に返信
    > ■No69626 (けんけん さん) に返信
    >>上記Windowsアプリケーションを単体で起動させた場合、フォルダ有無は取得できているのですが
    >>その場合でも認証が必要なのでしょうか。
    >
    > サービスで使用されるアカウントは、何をお使いですか?
    > http://salaryman-life.blogspot.jp/2011/03/local-system.html
    >
    >
    > もう一つ。自動起動でサービスを利用する場合、ネットワーク サービスがまだ初期化されておらず、
    > リモート サーバーの名前を DNS を介して解決できないというケースもあると聞いたことがあります。

    魔界の仮面弁士 さん
    回答ありがとうございます。

    アカウントはLocal Systemを使用しております。
    サービスについては、現在手動実行で試しております。
記事No.69624 のレス /過去ログ119より / 関連記事表示
削除チェック/

■69639  Re[1]: Windowサービスからキックされるアプリ
□投稿者/ オショウ -(2014/01/16(Thu) 02:16:55)
    No69624 (けんけん さん) に返信

      WinXPだから、動作した・・・
      と言う点を忘れないでください。

      Vista以降なら、Windowsアプリをキックした際、エラーとなる可能性もあります。

      要は、Windowsサービスは、デスクトップウィンドウを持たないので、Windowを持つ
      アプリを起動した場合、ウィンドウ生成段階でエラーとなる場合があります。
      一般的には、コンソールアプリケーションとして作成しますが、何も画面表示を行わ
      ないように作成します。

      あと、Session 0 分離でしょうか・・・
      http://msdn.microsoft.com/ja-jp/library/windows/hardware/gg463353.aspx

      その他としては、先に投稿されておりますアクセス権限の問題です。
      サービスがLocalSystemですので、起動されたプロセスもそれを継承します。
      サービスのログオンユーザーを、デスクトップログインユーザーに変更することは、
      基本、オススメしません。

      ただ、昨今、偽装のプログラムを正しく書くと言う記事を、いろいろ検索しても見当
      たらないのが現状で・・・
      まぁ〜正しく書くならWin32 API 使わないとダメなうえ、そのサービスにデスクトッ
      プへのアクセス許可も与えないといけなくなりますので、かなりオオゴトなプログラ
      ムになってしまいます。

      簡単に・・・とするのであれば、別プロセスを起動せず、サービス上でそのまま実行
      できるようにすれば、サービスの権限設定のみで回避できるようになると思います。

    ※ 因みに私はサービス上ですべて行うように書いてます。
      正しく権限設定できれば、FileSystemWatcherでの監視も可能になったと記憶していま
      す。

    ※ WinXP自体、サポートが終わるので、Vista以降でも正常に動作する・・・
      と言う手法を習得されるのが、先々よいのでは・・・と考えます。

    以上。参考まで
記事No.69624 のレス /過去ログ119より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -