簡體   English   中英

通過 Visual Studio 使用 CMake 運行 powershell 腳本而不更改系統范圍的權限

[英]Running powershell script with CMake through Visual Studio without changing system-wide permissions

我想壓縮一個文件夾。 這在 Linux 等操作系統上很容易,系統管理員可以輕松安裝命令行 zip 工具,例如apt install zip 不幸的是,在 Windows 上並不是那么簡單。

我發現的一個簡單解決方法是,我可以在這樣的 powershell 腳本中使用Compress-Archive

Compress-Archive -Path $folder -CompressionLevel Optimal -DestinationPath $zipPath

然后在項目構建之前或之后使用folderzipPath調用它。

為此,我的CMakeLists.txt將有如下一行:

execute_process(COMMAND powershell ${powershellScriptPath} "\"${folderPathToZip}\"" "\"${outputZipPath}\"" OUTPUT_QUIET)

這工作正常,除了我必須允許腳本在我的計算機上全局且不安全地運行。

我希望它可以在任何 Windows 計算機上運行,​​而無需人們對設置進行任何修改。 我也不喜歡讓其他開發人員出於明顯的原因在全局和不安全的情況下允許腳本的想法。 我希望我的開發人員能夠打開項目並按 build 並且一切正常,這是我實現它的最后一件事。

有沒有辦法通過改變程序的調用方式來運行這個腳本? 或者我被卡住了,必須找到另一種方法來做到這一點? 或者是否有某種方法可以自動將此特定文件列入白名單,而無需用戶執行任何額外步驟?

解決這個問題的唯一另一種方法是我編寫自己的 zip 實用程序,該實用程序在每次構建時都會調用以壓縮這些東西,但對於感覺如此接近可操作的東西來說,這是一堆工作。

編輯:我可以安全地假設計算機安裝了 powershell 並且相對現代

您可以通過將-ExecutionPolicy Bypass傳遞給 PowerShell CLI(在 Windows PowerShell 的情況下為powershell.exe來繞過有效的 PowerShell 執行策略:

execute_process(COMMAND powershell -ExecutionPolicy Bypass -File ${powershellScriptPath} ${folderPathToZip} ${outputZipPath} OUTPUT_QUIET)

另請注意,我使用-File是為了指示 Windows PowerShell 執行腳本文件,因為它默認為-Command [1] ,這會更改參數[2]的解釋; 我不熟悉cmake ,但希望它在默認情況下/根據需要在參數周圍提供雙引號, -File應該足夠了。


[1] 請注意,PowerShell Core默認為-File

[2] 有關詳細信息,請參閱此答案的第二部分和后續部分。

暫無
暫無

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

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