2

コンソール、ライブラリ、およびサービス プロジェクトをセットアップしました。Library プロジェクトは、ファイルをフォルダーにロードし、テキストを変数に格納します。

コンソール プロジェクトは、これらの変数を操作します。コンソール プロジェクトを正常に実行でき、問題なくファイルをロードできます。ファイルは DLL で常にコピーするように設定され、ビルド アクションのコンテンツとして指定されます。

サービスでまったく同じコードを実行しようとすると。

File.ReadAllText(@"MyFolder\SomeFile.txt");

次の例外をスローします。

The type initializer for 'MyLibrary.Data.ReadFiles' threw an exception.

Setup Project タイプを使用してインストーラーを作成しています。サービスがインストールされた後、フォルダMyFolderはファイルと同様にサービスのアプリケーション フォルダに存在します。サービスがこれらのファイルを読み取れないという問題の原因は、他に何が考えられますか?

編集1

public class ReadFiles {
    public static string DataFile = File.ReadAllText(@"MyFolder\SomeFile.txt");
}
4

2 に答える 2

1

Windows サービスを実行しているサービス アカウントには、アクセスしようとしている場所から読み取る権限がありません。表示されているエラーは、表示されたコードが type の構築に存在する可能性が高いという事実に関係していますReadFiles

于 2013-06-05T17:35:33.060 に答える
0

ノードjsアプリケーションを実行するためのWindowsサービスの1つで、電子メールを送信するために同様の問題に直面していました。同じディレクトリから実行すると問題なく動作していましたが、Windows サービスと同じアプリケーションを実行すると問題が発生し、メールを送信できませんでした。@meanbunny からのコメントが役に立ったので、回答として追加します。

コードで相対パスとして言及されている場合、Windowsサービスはディレクトリ/ファイルにアクセスできません。絶対パスを使用するか、@Mikeがコメントで述べたように、各サービスにapp.configを使用するようにより柔軟にします。

于 2020-02-24T04:50:22.983 に答える