2018年10月15日 星期一

使用Lotusscript呼叫.Net console程式(.exe)執行檔

過去在Lotus Notes呼叫外部的自動化程式,我大多都以web service的方式來在呼叫。

此次為了偷吃步,較不嚴謹的使用.net console的專案,來開發自動化AD及遠端電腦的控制

而為了讓Notes能呼叫console的exe檔案,就必須使用shell指來來達成windows command調用的方法。

我使用了代理程式run on server的方式,並把安全性調到2

執行時期安全層次,調整至2.允許受限作業


接著呼叫shell()

而shell裡要包的就是command line的指令,但必須在command就直接呼叫cmd執行exe,並且自動開閉cmd。

這樣的需求就要下指令如下例:

cmd /K 程式.exe & exit


將指令包在shell裡面

dim result as Integer

result = shell("cmd /K 程式.exe & exit")


這樣呼叫就可立即執行並關閉cmd視窗,借僅限於windows平台。

2018年10月14日 星期日

Server 2012 誤移除.NET 4.5 Framework後,重啟主機只剩命令列視窗問題.

解決方案連結參考→連結

今日為了解決web deploy無法正常驗証的問題,重新移除了web deploy的元件及所有.net Framework.
試著移除看看後,更糟糕了


導致windows server 2012重啟後,只剩下命令提示畫面(commmand line),後來參考討論區的解決方案,還原了原本的server GUI 畫面及.net 4.5

以下為剩下命令提示畫面(commmand line),要還原執行的指示:

1.執行元件安裝,分別是.net 4.5 Framework及PowerShell
DISM.exe /online /enable-feature /all /featurename:NetFx4
DISM.exe /online /enable-feature /all /featurename:MicrosoftWindowsPowerShell


2.執行指令,重新開機
Shutdown -r -t 0


3. 開機完成後,執行指令進入PowerShell模式
PowerShell.exe


4. 執行指令安裝還原Server GUI畫面
Install-WindowsFeature Server-Gui-Shell, Server-Gui-Mgmt-Infra

安裝畫面


5. 執行重新開機指令
Restart-Computer


6.接著還原到GUI畫面後,就可以重新安裝服務。

2018年10月13日 星期六

visual studio MVC 的javascript前端編輯,如何Debug

試了一下在javascript前端的.cshtml副檔中插入debug的中斷點
cshtml中插入debug的中斷點
cshtml中插入debug的中斷點

按下F5進行偵錯,確沒有效果。

查詢網路上的資料後,必須寫debugger指令讓網頁執行時進入中斷點
寫debugger指令讓網頁執行時進入中斷點

寫debugger指令讓網頁執行時進入中斷點

寫入debugger指令後,即可正常執行中斷,並可以查看物件資訊
正常執行中斷,並可以查看物件資訊
可Debug看前端物件






使用NHtmlUnit瀏覽某些網站會出現java.net.SocketException: 'Connection reset'錯誤訊息的問題

  2年前曾經有做過一個C# MVC專案要去單字網站爬下想背的單字來做資料庫,最近心血來潮也想重啟專案來使用(準備考TOEIC)。

發現之前專案(NHtmlUnit)可以爬的網頁竟然會彈跳java.net.SocketException: 'Connection reset',這問題讓我想不出所以然。

java.net.SocketException: 'Connection reset'
java.net.SocketException: 'Connection reset'


搜尋了這篇(文章)討論區的結果後發現,可能的問題是出在NHtmlUnit預設沒有設定TLS的版本

NHtmlUnit.WebClient client = new NHtmlUnit.WebClient(BrowserVersion.CHROME);
client.Options.AppletEnabled = true;
client.Options.RedirectEnabled = true;
client.Options.JavaScriptEnabled = true;
client.Options.ActiveXNative = true;
client.Options.CssEnabled = true;
client.Options.ThrowExceptionOnScriptError = false;
client.Options.ThrowExceptionOnFailingStatusCode = false;
client.WaitForBackgroundJavaScript(1000);
client.Options.Timeout = 100000;
HtmlPage page = client.GetHtmlPage("https://dictionary.cambridge.org/");

因此在程式碼中,加入TLS協定,就可以正常爬站了。

client.Options.SSLClientProtocols = new String[] { "TLSv1.2", "TLSv1.1" };

完整的程式碼如下:
NHtmlUnit.WebClient client = new NHtmlUnit.WebClient(BrowserVersion.CHROME);
client.Options.AppletEnabled = true;
client.Options.RedirectEnabled = true;
client.Options.JavaScriptEnabled = true;
client.Options.ActiveXNative = true;
client.Options.CssEnabled = true;
client.Options.ThrowExceptionOnScriptError = false;
client.Options.ThrowExceptionOnFailingStatusCode = false;
client.Options.SSLClientProtocols = new String[] { "TLSv1.2", "TLSv1.1" };
client.WaitForBackgroundJavaScript(1000);
client.Options.Timeout = 100000;
HtmlPage page = client.GetHtmlPage("https://dictionary.cambridge.org/");

Chrome 瀏覽器查看SSL/TLS方法

今天遇到爬蟲(crawler )程式在解析網頁彈跳錯誤的問題,在懷疑是不是TLS的版本問題,
又遇到Chrome到底要怎麼知道SSL/TLS版本要在那裡看的問題?
1. 首先呢,必須要到目標網站,以https://dictionary.cambridge.org/為例
2. Chrome瀏覽器要打開開發者模式(F12)
3. 查看Security的頁籤,就可以看到TLS的版本認証資訊了
Security的頁籤,可以看到加密版本資訊
Security的頁籤,可以看到加密版本資訊