SecurityException при перечислении задач V1 и отображении информации о задачах с использованием DataGrid
Я использую Task Scheduler Managed Wrapper от Codeplex. Я сталкиваюсь со странной проблемой. Я пытаюсь перечислить задачи на нескольких удаленных серверах (V1 и V2) и затем отобразить задачи в сетке данных. Эта проблема возникает, когда я подключаюсь к серверу V1 (используя forceV1=true). Перечисление работает нормально - данные передаются в сетку даже. Но как только я перемещаю курсор по сетке, я получаю исключение SecurityException, в котором говорится: "Запрашиваемый доступ к реестру запрещен". Кто-нибудь знает, что происходит?
public partial class MainWindow : Window
{
public MainWindow()
{
String osVer;
using (var reg = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, "deves07"))
using (var key = reg.OpenSubKey(@"Software\Microsoft\Windows NT\CurrentVersion\"))
{
osVer = string.Format("Name:{0}, Version:{1}", key.GetValue("ProductName"), key.GetValue("CurrentVersion"));
}
TaskService ts;
if (osVer.Contains("2003"))
{
ts = new TaskService("REMOTE", "username", "domain", "password", true);
}
else
{
ts = new TaskService("REMOTE", "username", "domain", "password");
}
List<TaskInfo> taskList = new List<TaskInfo>();
EnumFolderTasks(ts.RootFolder, taskList);
DataContext = taskList;
}
void EnumFolderTasks(TaskFolder fld, List<TaskInfo> taskLst)
{
Debug.WriteLine(fld.Name);
foreach (Task task in fld.Tasks)
taskLst.Add(ActOnTask(task));
foreach (TaskFolder sfld in fld.SubFolders)
EnumFolderTasks(sfld, taskLst);
}
TaskInfo ActOnTask(Task t)
{
TaskInfo taskInfo = new TaskInfo();
taskInfo.Name = t.Name;
taskInfo.isRunning = t.IsActive;
taskInfo.NextRunTime = t.NextRunTime;
taskInfo.LastRunTime = t.LastRunTime;
//taskInfo.LastRunStatus = t.LastTaskResult;
return taskInfo;
}
}
public class TaskInfo
{
public string Name { set; get; }
public bool isRunning { set; get; }
public DateTime NextRunTime { set; get; }
public DateTime LastRunTime { set; get; }
public int LastRunStatus { set; get; }
}
1 ответ
Это любезно предоставлено Dahall в Codeplex (Большое спасибо Dahall)
Во-первых, попробуйте заключить скобки в рамки вашего первого
using
заявление. Вы также можете сделать то же самое сTaskService
пример. Вы можете сделать это, выполнив:List<TaskInfo> taskList = new List<TaskInfo>(); using (TaskService ts = new TaskService(REMOTE", "username", "domain", "password", osVer.Contains("2003"))) { EnumFolderTasks(ts.RootFolder, taskList); } DataContext = taskList;
Я не уверен, почему это происходит только для вызовов V1, но это решило мою проблему.