iT邦幫忙

0

撰寫執行檔的問題

各位前輩好:
小弟是一個對程式不熟(本身也不是該領域的),不過卻有一些透過小程式來解決工作問題的興趣,bat與powershell就不討論了,針對一些較複雜的問題需要處理,我常常是使用ASP.NET的環境使用C#來開發一些小程式,我是以新增->專案->建立主控台應用程式(.NET Framework)的方式來開始一些小程式的開發,程式內容多元,主要功能在提取一些我管理公司內部電腦所需要的資訊,譬如,防毒軟體狀態、USB使用紀錄、windows更新時間等(公司比較窮,沒有$$買相關DLP產品或稽核軟體),並且將收集的資料回傳到DB,這些小程式我是透過AD派送到用戶端背景執行的方式來運作。
但是我一直一些困擾,使用主控台應用程式(.NET Framework)的方式來開發,他產製的檔案是一整個資料夾,其中單獨的exe檔案是無法單獨執行的,如下圖:
https://ithelp.ithome.com.tw/upload/images/20200502/20122797k1Wm6LjHtH.png
其中checkagent0307.exe這支執行檔無法單獨運作,需要有整個資料夾的其他資料才可以,我目前的做法是透過makesfx這支程式來將整個資料夾包成一個exe檔案來運作,不過這會有兩個問題
(1)有些防毒軟體(如小紅傘)會將這類打包成的exe檔案判定為病毒
(2)感覺我一開始如果要寫執行檔,利用建立主控台應用程式方式開感覺是錯的

所以想問各位前輩,如果是使用ASP.NET C#開發,要用哪種方式或是專案類型開發,使的產出來的檔案就是一個單獨的執行程式,而非是整個資料夾呢,小弟寫程式自學,可能問了一個蠢問題,上網查詢資料又沒有頭緒,感恩前輩耐心看完本文並提供經驗?

看更多先前的討論...收起先前的討論...
這些都是必要的元件,所以才會放在目錄裡。你需要的不是把它變成單一執行檔,而是發行工具。(我用的是很老的Visual Studio 2013,我記得他有發行工具可以免費安裝,然後選擇建置->發行,就會把東西打包成安裝用的setup執行檔,還是有多個檔案就是了)

除非你所有功能都是從windows api開始硬幹,不然你也都是呼叫別人寫好的東西來幫你做事情,不要幻想做好的東西只有一個執行檔之類啦XD
盡可能只 using System. 開頭的類別,我慣用Linq to SQL就不會去參考到EF5/6的DLL進來
你這個程式必要連結的EntityFramework*.DLL就可以不用了,可以試試把EXE單獨複製到另一台電腦上直接執行(.NetFramework 還是必要的,另一台電腦還是要自行安裝)
froce iT邦大師 1 級 ‧ 2020-05-04 19:22:19 檢舉
https://stackoverflow.com/questions/1868449/static-linking-of-libraries-created-on-c-sharp-net

要不然去學Go,用Go寫
froce iT邦大師 1 級 ‧ 2020-05-04 21:42:14 檢舉
然後要用GPO派包成msi也是一個解。
您要做一個「執行檔」
但最後又說「使用ASP.NET C#開發 ?????」

這......我不能理解。或許你得先弄清楚
首先謝謝各位前輩的建議,
fillanofeng:嘗試過發行這個功能,不過我是希望能夠是單一執行檔用GPO派成工作排程定期執行
froce:包成msi似乎只能用付費軟體? 免費的似乎都有病毒
mis2000lab:這也是我其中得問題之一,兂為我一開始只對ASP.NET 平台有操作經驗,所以就自己胡搞瞎搞用C#語言矇著頭下去寫,請問撰寫我上述要求的執行檔一般是用什麼語言呢?
謝謝各位前輩,我已經成功直接將.NET framework專案整個改成.NET Core 並且成功匯出成單一檔案可執行!!感恩!!

2 個回答

1
海綿寶寶
iT邦大神 1 級 ‧ 2020-05-02 22:26:41
最佳解答

要用哪種方式或是專案類型開發,使的產出來的檔案就是一個單獨的執行程式,而非是整個資料夾呢

恐怕答案是「兩者皆非」
用正規的方式是辦不到的
或者說
官方根本不提供這種機制

如果可以升級到.NET Core 3.0的話
就有機會了

雖然是「新瓶裝舊酒」的做法
不過對你和使用者而言
應該已經滿足需求了

前輩您好:我有去下載.NET Core 3.0,也有依照裡面得指令去下,但是無法成功,原因是出在我要新增專案->主控台應用程式(.NET Core)在重寫程式碼嗎?(因為我原是用主控台應用程式(.NET Framework)開發),但是用.NET Core修改原程式碼很多參考值都找不到

0
eric_suwh
iT邦新手 5 級 ‧ 2020-05-03 00:49:06

現在都用 Linux 上開發 Java 了,
之前有用過 c# 及 VB.Net,
記得要 build 成 release 版本,
而且所有引用到的 lib ,不能是 dll。

實際可以參考:
如何製作獨立執行檔
Visual Studio編譯小技巧:工具程式一檔搞定
介紹好用工具:ILMerge (將多的 .NET 組件合併成單一組件)

看更多先前的回應...收起先前的回應...

前輩您好:
上述方法都有嘗試過,不過ILMerge包完得檔案不完整無法執行
「現在都用 Linux 上開發 Java 」這邊可以在說明清楚一些嗎? 感恩

eric_suwh iT邦新手 5 級 ‧ 2020-05-05 17:26:43 檢舉

「現在都用 Linux 上開發 Java 」

工作和家裡都是用 Linux 環境,
沒有 Windows 的環境了,
所以也一段時間沒有碰 .NET 的東西了。

eric_suwh iT邦新手 5 級 ‧ 2020-05-05 17:27:37 檢舉

如果沒辦法打包成單一執行檔,
應該也可以加入 path 的方法來執行。

比如說:

建立 runCheckAgent.cmd,
放到 checkagent0307.exe 所在的目錄下,
執行 runCheckAgent.cmd 會將 checkagent0307.exe 所在的目錄加入 path 之中,接著再執行 checkagent0307.exe。

然後把整個目錄 copy 到 c:\temp\CheckAgent 後,
直接執行 c:\temp\CheckAgent\runCheckAgent.cmd,
應該就可以了。

runCheckAgent.cmd 內容如下:

@echo off

set CurrDir=%~d0%~p0
set CurrDir=%CurrDir:~0,-1%
set path=%CurrDir%;%path%

start checkagent0307.exe

.

我要發表回答

立即登入回答