2011-11-17 43 views
5

我有使用C#TaskManager对象创建任务的代码。在Windows 7上,它工作正常,但在Windows XP上(大概是其他Windows),它完全不起作用,因为该任务的默认用户是系统,因此没有用于显示GUI的会话。如果我在控制面板小部件中手动修改创建的任务以将作业设置为仅在用户登录时才运行,并且仅为特定用户运行,则一切正常。但是,尽管搜索了几个小时,我看不到在C#对象中设置这些选项的选项。任何人都知道现有对象的解决方案?我不想重写所有的东西来手动运行调度程序EXE,并通过命令行传递东西。如何在C#中使用TaskScheduler设置“仅在登录时运行”和“以...运行”?

Q

+1

任务调度程序接口是基于COM的,您需要例如IScheduledWorkItem :: SetFlags()。没有“C#TaskManager对象”。也许你应该发布一个链接到你在某处找到的代码? –

+0

谢谢!我最终自己发现了这一点,但当然你对我的使用第三方包装是正确的,我没有意识到这一点!我发布了解决方案。 –

+0

@QuinxyvonBesiex你应该在下面添加你的答案,然后在需要的时间量之后,选择它作为答案 - 保持干净 – Prescott

回答

4

好的,我想出了答案!

我没有意识到它,但我一直在使用第三方Task Scheduler Managed Wrapper(自从我编写代码的那一部分起,我已经有一段时间了),这就解释了为什么帮助很难找到!我刚才偶然发现了这个页面,在他们的例子中就是我所需要的! detailed solution in context can be found here,但关键部分是:

// Create a new task definition and assign properties 
TaskDefinition td = ts.NewTask(); 
td.Principal.UserId = System.Security.Principal.WindowsIdentity.GetCurrent().Name; 
td.Principal.LogonType = TaskLogonType.InteractiveToken; 

感谢您的帮助!

+0

除了在某些情况下设置登录类型,还有更多。如果这个答案本身并没有让你的代码工作,看到这个问题:http://stackoverflow.com/questions/43599271/how-to-set-run-only-if-logged-in-and-run-as-与-的TaskScheduler-在-C/43767201#43767201 – MadTigger

相关问题