簡體   English   中英

無法從TCL腳本執行NSIS安裝應用程序

[英]Can't exec NSIS installation application from tcl script

運行tcl 8.4.13 ,我有一個tcl腳本來執行我的NSIS安裝應用程序(已由Microsoft正式簽名),該腳本曾經可以運行,但現在卻失敗了(Windows 7和10),可能是由於Windows安全更新或其他原因造成的? 當目標是notepad.exe的本地/重命名副本時,相同的tcl腳本可以正常工作。 從命令行運行NSIS應用程序可以正常工作。

tcl腳本如下所示,通過tclkit-win32 tclmnu.tcl運行,其中tclmnu.tcl如下所示:

#! /bin/sh -x
# \
    exec wish "$0" "$@"
#

package require Tk

#set runcmd notepad_local_copy.exe
set runcmd my_nsis_app.exe  # this doesn't work

# this works with the notepad_local_copy.exe (above) but not my_nsis_app.exe
set catchcode [ catch { exec ${runcmd} } result ]

# also tried this, doesn't work either
#set catchcode [ catch { exec "runas /usr:administrator: ${runcmd}" } result ]

tk_messageBox -type ok -icon error -message "DEBUG: catchcode=${catchcode}"
# catchcode is 0 when runas=notepad_local_copy.exe, 1 when it's my_nsis_app.exe

好吧,我通過添加cmd / c解決了它,如

set catchcode [ catch { cmd /c exec ${runcmd} } result ]

我不知道為什么它需要它,也不知道為什么它似乎在以前而不是現在起作用。

我對TCL一無所知,但我假設exec調用CreateProcess 當將UAC添加到Vista中時,似乎Microsoft認為CreateProcess的級別太低而無法執行提升。

處理管理員和標准用戶的上下文:

CreateProcessCreateProcessWithLogonW沒有新的標志來將子進程啟動為提升狀態。 在內部,CreateProcess()通過查找清單,確定其是否為安裝程序或是否具有應用程序兼容性填充程序來檢查目標應用程序是否需要提升。 如果CreateProcess()確定目標應用程序需要提升,它只會失敗並顯示ERROR_ELEVATION_REQUIRED(740)。 它不會聯系AIS來執行海拔提示或運行應用程序。 如果CreateProcess()確定應用程序不需要提升,它將把它作為新進程生成。

ShellExecute[Ex]但是可以聯系UAC服務並顯示UAC高程對話框:

要以編程方式將子進程作為提升后的進程啟動,必須​​發生兩件事:首先,需要將子進程的可執行文件標識為需要提升,其次,父進程需要使用ShellExecute()或ShellExecuteEx()。

似乎有多種方法可以使TCL調用ShellExecute

eval exec [auto_execok start] {""} [list [file nativename $filename]] ;# http://wiki.tcl.tk/2809

要么

twapi::shell_execute -path filename.exe ;# http://www.magicsplat.com/blog/how-do-i-exec-thee/

您也可以請求提升可執行文件,即使它們未標記為需要提升:

twapi::shell_execute -path filename.exe -verb runas 

runas 動詞runas.exe是不同的東西)

NSIS腳本使用RequestExecutionLevel屬性將可執行文件標記為所需的UAC提升級別。

使用cmd /c有點麻煩,可能會在短時間內顯示一個控制台窗口。 cmd /c首先嘗試CreateProcess,然后在需要提升時退回到ShellExecuteEx 我不確定這是否已記錄為行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM