【发布时间】:2010-12-30 04:35:25
【问题描述】:
我在 C# Windows 窗体中构建了一个程序,现在在第一次加载时它会尝试创建计划任务。如果它引发异常并且它在主计算机中,那么这是该软件第一次加载(您可以在多台计算机上安装此程序,但一台计算机是主计算机)。
我已经在许多计算机上尝试过这个程序并且它运行良好(XP-SP1/2、Vista-SP1/2、Win7),现在当我尝试将它安装在受限用户上时(在 Win XP Pro SP2 上)它尝试创建计划任务。我得到一个 Argument Null Reference,当我输入管理员用户时,它会在管理员用户上安装计划任务,并且如果受限用户登录(这是 99.9% 的时间)将不会运行。为什么我会得到这个例外?我已经在代码上寻找了几个小时来搜索这个异常的原因,但我找不到它!
非常感谢!
阿米特
MainOrSec = true;
User 和 Pass 是从 FirstTimeUp 返回的公共变量。
private bool CreateNoExit()
{
try
{
RegistryKey key = Registry.CurrentUser;
key = key.OpenSubKey("Crm");
MainOrSec = Convert.ToBoolean(AESIMP.Decrypt((string)key.GetValue(AESIMP.Encrypt("MorS"))));
}
catch (ArgumentNullException)
{
MainOrSec = true;
}
if (MainOrSec)
{
ScheduledTasks sc = new ScheduledTasks();
Task task;
try
{
task = sc.CreateTask("NoExit");
FirstTimeUp f = new FirstTimeUp(this);
f.ShowDialog();
}
catch (ArgumentException)
{
return false;
}
if (!CreatT)
return false;
task.ApplicationName = @"C:\Program Files\Triffon\Crm Setup
2.0.0002\noexit.exe";
task.Comment = "Check For no exit on the database.";
task.SetAccountInformation(User, Pass);
task.IdleWaitMinutes = 10;
task.Triggers.Add(new DailyTrigger(5, 0));
try
{
task.Save();
task.Close();
sc.Dispose();
}
catch (COMException ex)
{
MessageBox.Show(ex.Message);
return false;
}
return true;
}
return false;
}
【问题讨论】:
-
因为我告诉过你它适用于每个系统,但这种有限的用户条件虽然你不需要 - 因为我有权限问题或我错过了处理权限的一些代码。我将编辑问题并添加代码。
-
哪行代码触发了异常?对于奖励积分,打印该行中使用的每个变量的值,或使用调试器检查它们。您可能会发现您正在尝试取消对 null 的引用。
-
那是什么让我生气!使用消息框将代码“try-catch”放在整个代码中,并且此代码或其使用的其他类中没有函数,引发此异常
-
您问题的标题与问题无关。该代码不管理计划任务,您只是有一段代码在某些用户上下文中不起作用。
-
您的代码正在触发异常。仅仅因为它不是在每台计算机上都发生并不会降低这一点。发布异常的堆栈跟踪,也许我们可以为您提供帮助。放下态度。
标签: c# scheduled-tasks