考えられる解決策と説明をしばらく探していましたが、実際には何も見つかりません。
次のコマンドは、Windows サービスから実行されています。cmd で直接使用すると、同じコマンドが機能します。エラーなどは返されません。
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = "/C lpr.exe –S " + printerIP + " –P " + deviceName + " –o l " + fInfo.DirectoryName + @"\" + fInfo.Name;
process.StartInfo = startInfo;
process.Start();
私が見逃しているのは些細なことかもしれませんが、私には見えません。簡単な代替手段で lpr-command を使用して移動できる場合は、それが大好きですが、まだ何も見ていません。
編集: プリンターに送信しようとしているファイルが pcl ファイルであることを追加するのを忘れていました。
Edit2: 非表示のウィンドウ スタイルと WaitForExit(5000) をプロセスに適用せずにコマンドを実行すると、コマンドラインが書き込まれていないように見えます。表示されるのは空のコマンド プロンプトだけです。
編集3:これを少しいじっていて、次のことを思いつきました:
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "lpr";
startInfo.Arguments = " –S " + printerIP + " –P " + deviceName + " –o l " + fInfo.DirectoryName + @"\" + fInfo.Name;
process.StartInfo = startInfo;
process.Start();
上記のコードは、ユーザーがフォームのボタンをクリックして実行すると機能します。そこで、コードをトレイ アプリケーションとして実行するように変更することにしました。これで問題が解決するかもしれないと考えたのですが、まだ実行を拒否しているようです。トリガーされたタイマーまたは別のスレッドによって実行されていることに何らかの問題がある可能性がありますか? それとも、それらのメソッドの権利と何か関係があるのでしょうか?