2017-02-08 7 views
0

サービス内からコンピュータのスマートカードから名前を取得する必要があります。プログラムを.exe dll miss matchとして実行しますか? (方法が見つかりません)

私はすべてのスマートカードの名前をファイルに書き込むこのプログラムを持っています。

using System; 
using System.Threading.Tasks; 
using Windows.Devices.Enumeration; 
using Windows.Devices.SmartCards; 

namespace DeviceEnumerationConsoleTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      EnumerateDevices().Wait(); 
     } 

     static async Task EnumerateDevices() 
     {   
      try 
      { 
       string selector = SmartCardReader.GetDeviceSelector();    
       DeviceInformationCollection devices = await DeviceInformation.FindAllAsync(selector); 
       string ret = "start1 "; 
       foreach (DeviceInformation device in devices) 
       { 
        ret = ret + device.Name + " _ "; 
       } 

       System.IO.File.WriteAllText(@"C:\ProgramData\IDNORTH\cards.txt", ret); 

      }catch(Exception e) 
      { 
       System.IO.File.WriteAllText(@"C:\ProgramData\IDNORTH\error.txt", e.Message); 
      } 
     } 
    } 
} 

私はそれを自分自身で実行すると素晴らしいこの作業。私はそれの外からそれを実行したとき

しかし、時には仕事と時々見られない

方法を返す:Void System.Threading.Tasks.Task.AddToActiveTasks(System.Threading.Tasks.Task)を。

ラインから:

DeviceInformationCollection devices = await DeviceInformation.FindAllAsync(selector); 

私はdllを持ついくつかの問題があるエラーから信じています。 プロジェクトで私は参照を追加しました。

C:\ 8.1 \参照\プログラムファイル(x86の)\ Windowsのキット\ CommonConfiguration \ニュートラル\ Windows.winm D

C:\プログラムファイル(x86の)\マイクロソフトのSDK \ WindowsPhoneApp \ v8.1 \ Tools \ MDILXAPCompile \ Framework \ Sys tem.Runtime.WindowsR untime.dll

私はサービスからexeを呼び出し、その中に参照を追加したり変更したりしていません。 Project1に追加されたのと同じウィンドウ参照があります。

+0

私はこれがあなたを助けると確信していません。あなたはそれが働いていないと言いました。これは明らかに何らかの「タイミング」問題を示しています。 1.スレッドタイプを指定しない場合、デフォルトでは「フォアグラウンド」スレッドなので、「待機」しなくても、作成されたスレッドは「フォアグラウンドスレッド」が完了するまで待機します。 2.今度はWindowsサービス 'OnStart'に時間制限があり、15秒以内に作業を完了し、OSに制御を戻す必要があります。そうでなければ、障害とみなされ、ウィンドウはプロセスを中止します。 – Thangadurai

+0

私の推測では、あなたのDoWorkはより多くの時間を費やしており、OnStartイベントの時間制限のためにプロセスは終了します。 – Thangadurai

+0

project1.exeで行われた作業を同期していますか? 'Process.Start'が完了するのを待ってから新しいプロセスを開始するのは同じ問題でしょうか? – Default

答えて

0

これがプロシージャであるかどうかわかりませんが、これは今動作しているので、これを回答としてマークする必要があると考えました。 C:¥Program Files(x86)¥Reference Assemblies¥Microsoft¥Framework.NETCore¥v4.5¥System.Runtimeへの参照を変更しました。WindowsRuntime.dll

デフォルトのおかげで!

関連する問題