none
以服务运行脚本 RRS feed

  • 问题

  • 我在win7上运行我们的软件,并写了一个脚本,通过软件来执行这个脚本。脚本的内容是telnet到其他的电脑,并关闭那台远程unix电脑

    我发现若是我们的软件以服务方式启动(权限是local service用户),然后执行脚本则会执行失败。 若软件以普通用户启动(比如电脑登陆用户jones),然后执行脚本则可以成功登陆并关闭远程电脑

    我查过原因,应该是local service的用户权限太低,我想在软件启动仍然以服务方式启动但是以jones用户运行软件,于是我在service里面选中我们的软件, 属性下面点击log on, 选中 this account(之前是local system account), 然后输入 jones用户名和密码, 重启系统后,在进程管理器中看到 ,软件的执行用户确实都是jones(之前是System), 可是执行脚本还是失败。。我怀疑虽然我修改了账户,但是实际上运行的级别还是local service用户

    我想请教下,如何可以提升软件的运行权限,使得软件可以在系统启动的时候就启动,但是权限却不是local service呢

    或者说是否是win7限制了以服务运行脚本?要如何解决这个问题呢?

    2014年10月28日 1:57

全部回复

  • 你可以考慮結合任務計劃, 並輔以指定賬戶來執行. 事實上從 Windows Vista 開始部分計劃是算作服務來執行.

    你可以先嘗試使用系統內置的 NetworkService 賬戶, 注意要對要調用的文件賦予權限. 如果可行, 則不需要單獨建立用戶.


    Folding@Home

    2014年10月28日 10:59
  • 可是我的目的是让我们软件来执行脚本

    我们软件会检测UPS(不间断的电源设备),当UPS断电,我们软件会执行脚本,然后关闭远程的UNIX 系统,然后再关闭win7系统

    所以任务计划并不合适。

    我有看到别人说,win7以后已经禁止服务程序运行脚本了?那有什么办法来解决这个问题呢?我们的软件肯定是要以服务方式运行,才能保护到系统正常关机。


    • 已编辑 jonesliu 2014年10月29日 9:28
    2014年10月29日 9:27
  • 任務計劃是適合完成此任務的. 之前已經說了 NT 6 系的任務計劃實際上承當了一些服務類的系統任務. 換句話說, 任務計劃就是一個服務來啟動指定準服務的機制.

    同時任務計劃是可以通過手動觸發的, 可以設置一個已經過期的只執行一次任務計劃, 比如 2001/01/01 00:00:00. 然後通過

    schtasks -run -tn TASKNAME

    執行.

    至於你提到的需求是通過遠程關閉 UNIX 系統, 實質上是發送特定數據包到遠程 UNIX 主機的特定端口. 這個需要對於 Windows 任務計劃來說是完全可以實現的. 實際上一些 Windows 主機之間的數據備份是通過任務計劃來實現的.

    最後需要說明的是, 如果要在簡體中文版 Windows 通過

    schtasks -query

    查詢已有任務狀態, 因為漢化原因, 會報錯. 需要將代碼頁切換到英文

    chcp 437

    當然中文名的任務會顯示為亂碼, 換回默認代碼頁

    chcp 936


    Folding@Home

    2014年10月29日 10:42
  • P.S. 我以為 Windows 任務計劃在功能上比 UNIX 傳統的 crontab/cron 提供的要全面的多.

    Folding@Home

    2014年10月29日 10:44
  • 如果執意要在 Windows 用服務的話, 那麼在 Windows 建立一個在外部電路中斷時向網絡發送特定 UDP 數據包的服務.

    在 UNIX 這邊定時用一個腳本或者守護進程來接收, 如果收到, 則關機.


    Folding@Home

    2014年10月29日 10:46
  • 當然也可以在 Windows 上一直發送 Online 包, UNIX 那邊一段時間收不到則關機.

    Folding@Home

    2014年10月29日 10:47
  • 其实所有一次性运行达到目的的操作都不适合以服务形式启动。既然是脚本何不添加为启动脚本?


    Alexis Zhang

    http://mvp.support.microsoft.com/profile/jie
    http://blogs.itecn.net/blogs/alexis

    推荐以 NNTP Bridge 桥接新闻组方式访问论坛。

    本帖是回复帖,原帖作者是楼上的 <jonesliu>;

    | 我在win7上运行我们的软件,并写了一个脚本,通过软件来执行这个脚本。脚本的内容是telnet到其他的电脑,并关闭那台远程unix电脑

    2014年10月29日 22:45
    版主
  • 我还是不太明白,因为我理解的计划任务是定时的(比如你所提到的某个固定时间点),而UPS电源断电是随机的,计划任务如何知道UPS什么时候断电,然后执行这个脚本呢?

    2014年10月30日 1:12
  • 目前我们也有这样做,在Unix系统上也安装我们软件,然后发UDP 数据包彼此通讯,只是Unix系统多种多样,solaris, MacOS, FreeBSD,HPunix,AIX, 等等,还有一些NAS系统, 软件不能保证在所有系统上都运行成功,一来是测试环境不允许,二来不同的系统上面都有差异。所以想找个比较可靠的方式,能不是很麻烦就能实现

    2014年10月30日 1:16
  • 软件是要以服务方式启动,因为要保护主机关机(当软件检测到UPS电源断电一段时间, 就要安全关闭主机),并且在主机关机前,执行脚本(vbs编写的)来关闭其他的远程Unix系统

    所以目前如果服务设置为启动脚本,就无法在电脑没有登陆时候保护电脑。我们是一定要保证软件以服务方式启动

    现在的问题是,这个脚本在dos下能执行,如果软件以非服务方式启动,也能被执行, 就是软件服务启动才不可以

    2014年10月30日 1:20
  • 我看了下,计划任务的激活条件只有这些:

    Daily, Weekly, Monthly, One time, When the computer starts, When I log on, When a specific event is logged

    有系统启动后执行计划任务,并没有系统关机前执行计划任务的选项

    2014年10月30日 1:37
  • 看起來你沒有很好理解 Windows 和 *nix 系統的異同.

    1. 命令提示符不是 DOS.  現在還有的 DOS 是都不是微軟的, 而是第三方開源的.
    2. Windows 中的啓動腳本,不需要用戶登錄即可運行. 需要用戶登錄的是登錄腳本. 設置入口: 組策略, 工作組 gpedit.msc, 域: gpmc.msc
    3. Windows 任務計劃除了依據像 *nix 傳統的 crontab/cron 那樣依據時間觸發外,
        還可以通過其他條件觸發, 比如人員登錄, 鎖定系統, 事件發生. 如果 UPS 相關軟件會在系統日誌中留下記錄的話, 那麼就可以通過
        這些的話, 只要通過觀察 taskschd.msc 和 schtasks 是不難發現.
       而且 NT 6 系的任務計劃可以將任務配置導出爲 XML 文件, 方便備份.
    4. 向遠程 *nix 主機進行測試, 不一定要執行特權任務, 可以是普通任務.
        比如: 在遠程 *nix 主機上使用一個普通用戶賬戶來接收特定消息, 收到後執行 echo  -e "$(date)\tMESSAGE" > log
        覆蓋寫入. 如果當心對系統有影響, 還可以限制每次寫入的時間間隔, 防止不恰當的連續寫入.
        如果非常擔心對正式環境有影響, 那麼可以找兩臺空閒 PC, 分別安裝 FreeBSD 和  Linux, 然後進行接近正式環境的測試.
    5. Windows 任務計劃也存在一些需要注意的地方.
        在 NT 5 系中, 如果像啓動腳本編寫的內容比較多, 比較複雜, 或者依賴於網絡, 那麼當
        用戶登錄時可能會看到實際執行任務的 cmd .
        如果存在高 磁盤 IO 佔用的情況下, 任務計劃在執行基於事件的任務時可能會延遲啓動, 一般出現在剛剛開機(或從休眠恢復)時.
    6. 也可以不通過組策略, 而直接使用任務計劃的 onstart 類型.


    Folding@Home

    2014年10月30日 2:09
  • 我看了下,计划任务的激活条件只有这些:

    Daily, Weekly, Monthly, One time, When the computer starts, When I log on, When a specific event is logged

    有系统启动后执行计划任务,并没有系统关机前执行计划任务的选项


    Windows 7/8 請通過 taskschd.msc 查看觸發器, 可看到像用戶登錄, 工作站鎖定, 事件發生的類型.

    Folding@Home

    2014年10月30日 6:22
  • 启动脚本可是先于用户登录执行的。启动脚本与登录脚本不一样。


    Alexis Zhang

    http://mvp.support.microsoft.com/profile/jie
    http://blogs.itecn.net/blogs/alexis

    推荐以 NNTP Bridge 桥接新闻组方式访问论坛。

    本帖是回复帖,原帖作者是楼上的 <jonesliu>;

    | 所以目前如果服务设置为启动脚本,就无法在电脑没有登陆时候保护电脑。我们是一定要保证软件以服务方式启动
    | 现在的问题是,这个脚本在dos下能执行,如果软件以非服务方式启动,也能被执行, 就是软件服务启动才不可以

    2014年10月30日 22:19
    版主