我需要从服务中获取计算机上智能卡的名称。
我有这个程序将所有智能卡的名称写入文件。
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:\ Program Files(x86)\ Windows Kits \ 8.1 \ References \ CommonConfiguration \ Neutral \ Windows.winm d
和
C:\ Program Files(x86)\ Microsoft SDKs \ WindowsPhoneApp \ v8.1 \ Tools \ MDILXAPCompile \ Framework \ Sys tem.Runtime.WindowsR untime.dll
我从服务中调用exe并且没有添加或更改任何引用。它与添加到Project1的窗口引用具有相同的窗口引用。
答案 0 :(得分:0)
不确定这是否是程序,但我认为我应该将其标记为已回答,因为它现在有效。 将引用更改为C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETCore \ v4.5 \ System.Runtime.WindowsRuntime.dll
感谢默认!