【问题标题】:ShellExecute failing with access deniedShellExecute 失败并拒绝访问
【发布时间】:2013-05-20 10:23:11
【问题描述】:

我正在使用 psexec 在远程系统中启动可执行文件。远程系统是64位的,而使用psexec推送的exe是32位的。

在运行“psexec”时,我提供了远程系统的管理员凭据,并且远程进程是使用这些凭据本身创建的。

32 位 exe 在远程系统上运行时,会执行一些操作,然后使用 ShellExecute 生成另一个可执行文件。

我发现在 windows 7 上,ShellExecute 返回错误代码 5(即 SE_ERR_ACCESSDENIED)。整个过程运行良好,目标机器为XP时ShellExecute成功。

有相同的想法或解决方法吗?我尝试初始化 COM ,但没有任何好处。 如果需要更多详细信息/代码,请告诉我。

【问题讨论】:

  • 可能是 UAC 问题?
  • UAC 在机器中被关闭。我尝试使用 CreateProcess 作为解决方法,它返回 1326 作为错误代码,这意味着“登录失败”。我尝试在调用 CreateProcess 之前添加 NetUseAdd() 并返回相同的错误代码。任何帮助将不胜感激。
  • 你传递给 CreateProcess 的可执行路径是什么?本地路径、UNC 路径、映射驱动器路径?
  • 一个 unc 路径 \\\\ExeName.exe。在 CreateProcess 中,我提供了第一个参数的完整路径,然后是下一个参数。所有其他参数为 0 或 NULL。我收到错误 1326。
  • 通过 psexec 提供的管理员凭据在包含该文件的服务器上是否有效?

标签: windows winapi psexec


【解决方案1】:

我发现了问题,实际上 ShellExecute 正在尝试执行位于共享位置的程序。我的猜测是它无法访问共享,因此拒绝访问。我改用 CreateProcess() 并确保在尝试执行该过程之前建立了共享连接。这行得通!

【讨论】:

    猜你喜欢
    • 2012-01-16
    • 1970-01-01
    • 2015-01-05
    • 2020-11-24
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多