iT邦幫忙

1

請問網頁(javascript)與exe互動或使用dll檔

jhit03 2018-04-10 09:05:2814074 瀏覽

各位大大好
我有個需求,我們有購入一個設備,他有開放二次開發(可用C,C#,C++,JAVA),讓我們開發系統去控制他
但現在有個問題,主管們希望軟體要用網頁去開發呈現(網頁只會跑區網)
如果依這個為前提下
那我初步想法是可以用javascript去執行用C,C#,C++,JAVA開發出來的exe,然後再透過這exe去控制設備
但是要考慮到,網頁執行exe時要如何帶入參數

我有搜尋一下google,雖然說因為安全性問題所以不建議,不過我這網頁是只會跑內部區網,所以安全性不是問題
而我測試幾個網路找到的範例,都只能用IE執行,也不知道執行時,要怎樣帶入參數

所以不知道這方法可不可行,各位大大是否願意給個方向

謝謝

補充

架構大概是這樣
設備→連線電腦(上面有安裝設備商的控制軟體,控制軟體有提供二次開發dll或api)

我們只要使用設備商控制軟體提供二次開發dll或api就可以間接控制設備或取回設備裡面資料
但是他們只提供C,C#,C++,JAVA的方法

其實如果不限制使用網頁,我用C#開發成exe執行檔,載入設備商提供的DLL或使用他提供二次開發的協定,就可以達到功能,可是現在主管希望操作介面是用網頁的方法(有些其他功能的考量),所以我才會有所困饒

看更多先前的討論...收起先前的討論...
Daniel iT邦新手 2 級 ‧ 2018-04-10 09:44:54 檢舉
聽起來有點像 webduino,或許你可以找找 Arduino 或 Raspberry PI 上面有沒有適合的方案。也問問廠商能否辦到你想要的功能。
jhit03 iT邦新手 4 級 ‧ 2018-04-10 10:41:33 檢舉
謝謝大大,我會來找相關資料是否可以達到需求
weiclin iT邦高手 4 級 ‧ 2018-04-10 12:16:28 檢舉
api是哪一種 api? 程式語言用的 lib? 還是 http api?
不用把事情搞複雜,php+exe就能解決的事,不需要多此一舉~
q00153 iT邦新手 3 級 ‧ 2018-04-10 13:55:44 檢舉
我之前玩過一個類似的專案,當初使用的是 phpdesktop 這個專案協助的,
它讓你可以開發 PHP 成為類似一個單機軟體在使用者的電腦上執行,
內砍 chrome 瀏覽器做頁面渲染,可以研究看看能不能幫上忙~

不過 PHP 絕對沒辦法砍入 dll 然後使用 C++ API,
結果應該都是額外寫一層 exe 包覆 dll,
然後使用 PHP 去 exec 那個 exe 檔,
怎麼都感覺多此一舉.......

除非!!<<--這個情況很例外,
我在 Win 上有使用過 COM 去操作 VBA,
這時候就可以使用 PHP 去達成一些原本要用 C# 或 VBA 才提供的功能,
不過我不確定您的廠商提供的 dll 有沒有包含 COM 接口。

參考連結
https://github.com/cztomczak/phpdesktop
http://php.net/manual/zh/faq.com.php
jhit03 iT邦新手 4 級 ‧ 2018-04-10 14:05:30 檢舉
大大好:api是哪一種 api? 程式語言用的 lib? 還是 http api?
不同設備商提供的方法都不一樣,目前遇到有提供程式語言dll,也有提供單機資料庫連線,也有提供http api,而我就是要把他們都整合起來到同一個介面
jhit03 iT邦新手 4 級 ‧ 2018-04-10 14:07:23 檢舉
補充,當然只是操作介面的整合而已,背後操作當然依設備商的方式去傳送或接受資料
weiclin iT邦高手 4 級 ‧ 2018-04-10 14:21:58 檢舉
只能說你這要做應該是可以做, 要用到 dll 什麼的除了另外弄個執行檔, 也可以試試看做成 php extension, 問題是值得嗎? 評估一下架構跟工作量然後看看主管能不能接受吧
jhit03 iT邦新手 4 級 ‧ 2018-04-10 14:36:24 檢舉
好的,我也有這樣想過,謝謝大大的熱心答覆
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
2
I code so I am
iT邦高手 1 級 ‧ 2018-04-11 11:13:38
最佳解答

這部分我剛好有實作過,微軟有提供一個 SignalR 的元件,它是一個 web socket wrapper,可以在 Web、Desktop 程式呼叫 SignalR,達成 Web、Exe 雙向溝通的功能。請參閱 https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/hubs-api-guide-server

jhit03 iT邦新手 4 級 ‧ 2018-04-11 17:58:16 檢舉

謝謝大大,我會測試看看這方法的

http://blog.darkthread.net/post-2012-07-10-signalr-remote-controller.aspx
這篇有介紹 SignalR 實現遠端程式遙控,使用 ASP.NET MVC 和 Console 程式溝通。

0

如果網頁是放在IIS上,就直接用C#處理就好,不需要用javascript

jhit03 iT邦新手 4 級 ‧ 2018-04-10 09:26:09 檢舉

大大好,那請問後端是用PHP也可以做到嗎?

小魚 iT邦大師 1 級 ‧ 2018-04-10 12:28:13 檢舉

PHP也是後端語言, 能做到的功能跟C#差不多

用C#開發成exe執行檔,這段改用網頁做,就是用PHP去寫你c#的邏輯,或是用PHP去呼叫C#開發的exe執行檔,兩種方式,自已選吧,如果能用c#開發出exe執行檔,要改用網頁寫也沒什麼困難的,只是要去了解一下PHP語法怎麼寫罷了,另外要透過api的方式(exe+api+php),有點多此一舉,除非你的架構之後會需要更大的彈性,不然前兩種方式很足夠了~
https://stackoverflow.com/questions/13446492/run-a-exe-with-input-parameters-from-php-web-page

0
froce
iT邦大師 1 級 ‧ 2018-04-10 09:57:23

是在server端執行設備嗎?
是的話php能直接執行外部命令啊。
http://eeepage.info/php-system-exec-passthru/

看更多先前的回應...收起先前的回應...
jhit03 iT邦新手 4 級 ‧ 2018-04-10 10:25:36 檢舉

大大好;是在client端執行網頁,也就是好幾台設備,各自有電腦,各自開啟網頁後,控制自己電腦所連線的設備,最後還要從設備取回資料存回資料庫

froce iT邦大師 1 級 ‧ 2018-04-10 10:44:13 檢舉

那你這個根本不用網頁啊?
1.寫個程式去控制client執行設備
2.將資料送回資料庫
何必拘泥於瀏覽器?現在瀏覽器因為安全性的原因,要做到這個很難。
你不把你主管為何一定要網頁的原因寫出來,我想很難給你容易達成的建議。

weiclin iT邦高手 4 級 ‧ 2018-04-10 10:52:14 檢舉

會不會是... client 端執行瀏覽器看 server 的網頁但是要能控制client 端的機器?

小魚 iT邦大師 1 級 ‧ 2018-04-10 12:30:07 檢舉

後端語言是在server端執行, 應該不能操控client端.
如果真的要操控client端, 應該要用單機程式.

weiclin iT邦高手 4 級 ‧ 2018-04-10 13:08:48 檢舉

現在就是不知道他的後端語言到底在 client 還是另有 server
以及上面提的, 到底為什麼要網頁...

jhit03 iT邦新手 4 級 ‧ 2018-04-10 13:53:41 檢舉

謝謝大大們的建議,其實使用網頁有幾個原因
1.主管在國外展覽看過用網頁成功案例,有給我看過當時錄下的影片,我看到網址的網頁檔是php,但是沒說怎樣做到的,所以我一時不知怎樣回報說用網頁做不到。
2.系統還會使用到其他網頁報表套件或行事曆套件,可以不用再重新開發
所以應該沒有絕對,只是先問問看如果以網頁為前提,是否有解
我舉例一下我們的想法
總公司人員設計一枝筆,假設有三個製程,筆蓋(使用機台A)→筆身(使用機台B)→筆芯(使用機台C),並設定好一些機台運作基本參數
工廠端打開系統,可以看到有這三個流程,就可以知道現在做到哪個階段,一些機台參數直接在網頁按確定就可以載入加工軟體,完成後會再回傳資料

weiclin iT邦高手 4 級 ‧ 2018-04-10 14:05:58 檢舉

也就是說你們現在公司有個內部網頁系統, 想要把新的機台透過這個網頁系統做控制及監看狀態

如果他們提供的軟體 api 可以從別的電腦連接過來, 你可以在 web server 上面寫個 agent 一邊跟網頁回報與接受指令, 一邊執行收到的指令控制機台

如果 api 只允許跟機台放在同一台機器, 那你就得在連接機台的各電腦上都有個 agent 做上面講的事情

大概是這樣?

jhit03 iT邦新手 4 級 ‧ 2018-04-10 14:09:12 檢舉

沒錯,差不多是這意思喔

froce iT邦大師 1 級 ‧ 2018-04-10 14:47:54 檢舉

你要做的工很大...
1.架個web系統,上面按鈕控制傳送到各機台的client
2.各機台接收client的命令去做控制
3.然後各機台即時回報給web server
4.可能定時更新或是用web scoket去push資訊

所以你要先寫可以遠端控制機台和負責傳回資訊的的client,然後web server還要可以push,要不然你的資訊不會即時更新。

五十男 iT邦新手 1 級 ‧ 2018-04-30 15:58:26 檢舉

"php能直接執行外部命令"
我好奇的想問,中文參數如何解,
包含UTF-8,UNICODE,超長參數...

0

其實如果只是單純要從網頁獲取資料的話,可以自已先寫個c#做輸出文件檔或是json檔。再搭配排程處理。
網頁再單純的去獲取這些資料就好。

但還看到需要做一些控制的話。一般如果你已經會運行exe但不知道該如何傳參數的情況。
你也可以考量使用bat。只是這招也只限於參數單一化。

最好還是架個後端程式的環境,windows的話就還是使用asp來處理好了。
再利用其後端語言的命令函數來運行你要的程式就可以了。

要不然,直接用jsp來配合java。這樣更好更快,反正它不是有支援java了。

jhit03 iT邦新手 4 級 ‧ 2018-04-11 17:58:39 檢舉

謝謝大大的建議

0
Luke
iT邦研究生 5 級 ‧ 2018-04-11 15:20:40

應該,要想網頁是顯示,機台狀態、機台資訊...等,網頁是負責,將訊號命令寫給(DB、伺服機)

伺服機直接對接機台,
伺服機使用API去控制機台

不然您要考慮的,client端執行網頁 是否有連到 機台,是連哪個機台

A client ==>A 機台
B client ==>B 機台

結果 B client 開啟的瀏覽器是A 機台資訊,Javascript,Java Applet... 還要去確認...等太麻煩了

jhit03 iT邦新手 4 級 ‧ 2018-04-11 17:27:38 檢舉

謝謝大大
如果說機台的API可以直接跨主機,讓SERVER使用,這是最幸運的,
但是就是有些設備商地提供的API,只能讓機台A所連線的A Client PC存取使用而已,所以我一開始想法才會想要在A Client 寫一個程式當作中繼溝通

我要發表回答

立即登入回答