Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 从计划任务调用WNetGetUniversalName时失败_Windows_Winapi_Windows Server 2008 R2_Delphi Xe5 - Fatal编程技术网

Windows 从计划任务调用WNetGetUniversalName时失败

Windows 从计划任务调用WNetGetUniversalName时失败,windows,winapi,windows-server-2008-r2,delphi-xe5,Windows,Winapi,Windows Server 2008 R2,Delphi Xe5,我有一个(win32)程序,该程序通过计划任务运行 运行时,我的软件应将许多本地驱动器号映射到UNC资源,验证映射是否成功,运行一些其他任务,然后取消映射驱动器 在本地用户的上下文下运行时,所有这些都可以正常工作。但是,当我通过系统任务调度器运行它时,验证任务失败 验证任务获取驱动器号,检查驱动器是否为网络驱动器(通过GetDriveType),然后,如果驱动器类型为drive\u REMOTE,则调用WNetGetUniversalName,并将结果与预期映射进行比较 当从常规用户上下文运行时

我有一个(win32)程序,该程序通过计划任务运行

运行时,我的软件应将许多本地驱动器号映射到UNC资源,验证映射是否成功,运行一些其他任务,然后取消映射驱动器

在本地用户的上下文下运行时,所有这些都可以正常工作。但是,当我通过系统任务调度器运行它时,验证任务失败

验证任务获取驱动器号,检查驱动器是否为网络驱动器(通过
GetDriveType
),然后,如果驱动器类型为
drive\u REMOTE
,则调用
WNetGetUniversalName
,并将结果与预期映射进行比较

当从常规用户上下文运行时,这是有效的。但是,当通过任务调度器调用该进程时,WNetGetUniversalName失败,出现错误87:
参数不正确。

在试图孤立这个问题之后,我得出了以下结论:

  • 该问题与用户权限无关:即使用户同时成为本地管理员组和域管理员组的成员,错误仍然存在
  • 我传递给函数的参数总是相同的:它是与
    :\
    连接的驱动器号
  • 我尝试过在短暂等待(100毫秒)后重复呼叫:同样的症状
  • 映射(通过
    wnetadconnection2
    )实际成功
  • 问题并不取决于可执行文件的位置:如果它位于本地计算机上或从UNC路径运行,则会发生同样的情况
  • 无论计划任务是否已设置为“以最高权限运行”,都会出现此问题
以下是我使用的确切呼叫:

APIResult := WNetGetUniversalName(PWideChar(pathToCheck), UNIVERSAL_NAME_INFO_LEVEL, @RemoteNameInfo, Size);
我不知道下一步该检查什么


编辑现在,我已恢复到另一种行为:所有驱动器的状态均已检查(GetDriveType),如果是网络驱动器,则将其取消匹配,再次检查,然后映射。这似乎可行,但速度较慢(当然),而且感觉不太安全。

这是一个正常的问题,驱动器号映射是按用户设置的。您可能使用错误的用户帐户运行计划任务。否则,当您使用本地帐户时,它将起作用。做有效的。谢谢你的评论。不幸的是,我不认为您理解我的工具的功能(或者我不理解您的评论)。如果有帮助的话,我将尝试添加更多关于今天下午进行的操作的细节。这是一个正常的问题,驱动器号映射是每个用户的设置。您可能使用错误的用户帐户运行计划任务。否则,当您使用本地帐户时,它将起作用。做有效的。谢谢你的评论。不幸的是,我不认为您理解我的工具的功能(或者我不理解您的评论)。如果有帮助的话,我将尝试添加更多关于今天下午所做工作的细节。