使用Zolom內存解析運行python腳本(不落地)


在目標機器運行python工具

好多工具都是python寫的,如果目標機器是linux的話自帶python環境可以很方便的運行這些工具,但是windows下是不自帶python環境的,所以一種辦法是直接在目標環境安裝一個python,另外一種就是直接在內存加載python腳本。

ironpython可以將python腳本轉成.net形式在內存中運行,兩個工具可以達到目的:

Zolom編譯方式

利用git將代碼克隆到本地,然后使用vs2019打開后,再解決方案右鍵-恢復NuGet包。

代碼解讀

Main函數開始,有兩種方式指定python腳本內容:

--script讀取的是明文形式的代碼,--b64script讀取的是base64加密的腳本內容,所以基本用法如下:

zolom.exe --script:"from random import seed; from random import random; seed(1); print 'getting random number'; print random();"

zolom.exe --b64script:"ZnJvbSByYW5kb20gaW1wb3J0IHNlZWQ7IGZyb20gcmFuZG9tIGltcG9ydCByYW5kb207IHNlZWQoMSk7IHByaW50ICdnZXR0aW5nIHJhbmRvbSBudW1iZXInOyBwcmludCByYW5kb20oKTs="

之后創建腳本引擎,然后將Lib.zip作為python庫加載到引擎當中:

看起來代碼很簡單,加載所有庫到內存之后運行代碼。

點1:Lib.zip通過什么方式打包到exe里

原本我以為,編譯之后的exe要和Lib.zip一起放到目標機器里,后來發現想多了,Lib.zip直接作為嵌入資源的形式打包到exe里了。

點2:DLL如何打包到exe里

項目中使用的NuGet包里除了IronPython,還使用了Costura.FodyFody,把這兩個包卸載之后,重新編譯之后,會發現多出了一堆Dll文件:

Uninstall-Package Costura.Fody
Uninstall-Package Fody

由此可知,Costura.Fody可以很方便的將依賴嵌入到exe中。

還原成之前的樣子,需要先將兩個包安裝回去:
注意版本問題,版本太高的話會報錯的

Install-Package Fody -Version 2.0.0
Install-Package Costura.Fody -Version 1.6.2

修改FodyWeavers.xml:

<?xml version="1.0" encoding="utf-8"?>
<Weavers>
	<Costura />
</Weavers>

重新編譯之后,生成的文件又變成了單個的exe:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM