-1

Codeplex の Task Scheduler Managed Wrapper を使用しています。私は奇妙な問題に直面しています。複数のリモート サーバー (V1 および V2) でタスクを列挙し、データグリッドにタスクを表示しようとしています。この問題は、(forceV1=true を使用して) V1 サーバーに接続しているときに発生します。列挙は正常に機能します - データはグリッドにも渡されます。しかし、カーソルをグリッド上に移動するとすぐに、「要求されたレジストリ アクセスは許可されていません」という 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; }
}
4

1 に答える 1

0

これは codeplex の dahall の厚意によるものです (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 コールでのみ発生する理由はわかりませんが、これで問題は解決しました。

于 2013-07-10T21:02:25.953 に答える