none
windows 7 和server 2008的run as问题 RRS feed

  • 问题

  • 我们自己有一个组件,出现了这样的情况:
    直接右击组件,选择run as administrator和右击CMD run as administrator 导航到组件的那个目录运行。出现了两个不同的结果。后者成功了。这两者有啥区别呢?
    2012年4月6日 3:00

答案

  • 没有什么本质区别,两者都是临时绕过 UAC 直接调用管理员权限。
     
    但右键的“以管理员身份运行”仅对右键单击的可执行文件生效;而先以管理员权限启动命令提示符再运行程序,则可以在命令提示符关闭之前对命令提示符访问的所有文件生效。
     
    --
    Alexis Zhang
     
    http://mvp.support.microsoft.com/profile/jie
    http://blogs.itecn.net/blogs/alexis
     
    推荐以 NNTP Bridge 桥接新闻组方式访问论坛以获取最佳用户体验。
     
    本帖是回复帖,原帖作者是楼上的 "胡子长了"
     
    直接右击组件,选择run as administrator和右击CMD run as administrator 导航到组件的那个目录运行。出现了两个不同的结果。后者成功了。这两者有啥区别呢?
     
    2012年4月6日 3:55

全部回复

  • 没有什么本质区别,两者都是临时绕过 UAC 直接调用管理员权限。
     
    但右键的“以管理员身份运行”仅对右键单击的可执行文件生效;而先以管理员权限启动命令提示符再运行程序,则可以在命令提示符关闭之前对命令提示符访问的所有文件生效。
     
    --
    Alexis Zhang
     
    http://mvp.support.microsoft.com/profile/jie
    http://blogs.itecn.net/blogs/alexis
     
    推荐以 NNTP Bridge 桥接新闻组方式访问论坛以获取最佳用户体验。
     
    本帖是回复帖,原帖作者是楼上的 "胡子长了"
     
    直接右击组件,选择run as administrator和右击CMD run as administrator 导航到组件的那个目录运行。出现了两个不同的结果。后者成功了。这两者有啥区别呢?
     
    2012年4月6日 3:55
  • 谢谢。

    2012年4月6日 5:50
  • 下面說法不夠充分存在問題

    不是這樣的, 之所以 run as administrator 不能執行成功, 而 CMD run as administrator 並定位到指定目錄再執行可以成功, 原因在於執行程序的當前目錄上, 前者是 %SystemRoot%\system32, 後者是程序文件所在的目錄
    你可以通過如下方法進行驗證

    將下列批處理命令保存到那個組件的目錄, 比方是: test.bat.

    @echo off
    echo %cd% > result_%random%_%random%_%random%.txt

    注:
    添加 %random% 系統變量是為了最大限度防止覆蓋已有文件.

    然後以 run as administrator 方式執行.

    執行完成後, 可以看到這當前目錄沒有文件 result_%random%_%random%_%random%.txt, 但是你可以在 %SystemRoot%\system32 找到該文件, 同時可以看到記錄在該文件的當前目錄.
    如果以 CMD run as administrator 方式並定位到指定目錄再執行, 則該文件會在組件所在目錄中.

    如果程序在編碼時沒有考慮到如何定義當前目錄, 就會因為當前目錄不是所需目錄, 而導致無法獲取到所需組件, 進而不能成功運行.

    上面說法不夠充分存在問題

    通過進一步測試, 之前所說通過 run as administrator 啟動程序的當前目錄是 %SystemRoot%\system32 是不夠準確的, 通過 cmd.exe 執行的批處理程序的當前目錄是 %SystemRoot%\system32 , 但測試的 GUI 程序尚未發現程序文件在自定義目錄, 但啟動目錄是 %SystemRoot%\system32 的情況.

    不過我認為無論是通過 run as administrator 或 CMD run as administrator 方式運行指定程序, 只要操作是通過該程序進行, 那麼是可以輕鬆訪問任意目錄的文件, 因為該程序本身已經具有不受限制的管理員權限, 所以訪問文件不成問題.

    至於你們的這個組件為何通過兩種方式運行存在兩種截然不同的結果, 建議通過 Process Monitor 或直接在代碼中添加 debug 代碼進行調試.

    Process Monitor

    http://technet.microsoft.com/en-us/sysinternals/bb896645


    Folding@Home



    • 已编辑 repl 2012年4月6日 12:20
    2012年4月6日 6:42
  • 如果在本地策略的安全選項啟用了

    用戶帳戶控制: 僅提升已簽名和驗證的可執行文件

    並且程序沒有可信的簽名, 那麼直接通過鼠標右鍵以管理員身份執行是會失敗, 系統會彈出消息框

    [Window Title]
    executionFilePath

    [Content]
    executionFilePath

    从服务器返回了一个参照。


    [确定]

    如果你們遇到的是這個情況, 解決方法是禁用該安全設置.

    因為該設置僅在 UAC 提權時生效, 所以如果先提權一個包含可信簽名的 cmd.exe, 然後定位到組件所在目錄, 會因為父進程已經具有不受限制的管理員權限, 而直接繼承父進程的權限, 成功運行.


    Folding@Home



    • 已编辑 repl 2012年4月6日 12:37
    2012年4月6日 12:30
  • 因為不知道具體執行的是可執行文件, 還是批處理腳本, 如果是後者, 則存在因下面這篇帖子描述的原因, 導致直接以管理員身份執行失敗

    64bit win7 下面脚本为何一闪而过
    http://social.technet.microsoft.com/Forums/zh-CN/window7betacn/thread/25fdf9bb-2539-4700-b351-f4a73a033994/


    Folding@Home

    2012年4月6日 12:51