我有一个(win32)程序通过计划任务运行。
运行时,我的软件应将大量本地驱动器号映射到UNC资源,验证映射是否成功,运行其他一些任务然后取消映射驱动器。
在本地用户的上下文中运行时,一切正常。但是,当我通过系统任务调度程序运行它时,验证任务将失败。
验证任务接受驱动器盘符,检查驱动器是否为网络驱动器(通过GetDriveType
),然后,如果驱动器类型为DRIVE_REMOTE
,则调用WNetGetUniversalName
并比较结果与预期的映射。
从常规用户上下文运行时,这可行。但是当通过任务调度程序调用该进程时,WNetGetUniversalName失败并显示错误87:The parameter is incorrect.
在试图找出问题后,我得出以下结论:
:\
连接的驱动器号。WNetAddConnection2
制作)实际上已成功。这是我使用的确切电话:
APIResult := WNetGetUniversalName(PWideChar(pathToCheck), UNIVERSAL_NAME_INFO_LEVEL, @RemoteNameInfo, Size);
我想出了下一步要检查的内容。
编辑目前,我已恢复了其他行为:检查所有驱动器状态(GetDriveType),如果是网络驱动器,则取消选中,再次检查然后映射。这似乎有效,但速度较慢(当然),感觉不太安全。