2023年3月29日 星期三

如何在batch使用管理者權限執行程式

Windows 的權限檢查越來越嚴,所以很多操作都需要使用到管理者的權限。原本我只知道可以用 runas 的方式來執行程式並使用預設的認證,如此就可以使用管理者權限來執行程式,但是這樣會有安全性的問題,因為認證已經儲存,所以也可以被其他惡意的人用同樣的認證來執行任何惡意的行為。

後來才發現有更好的方式,也就是使用 schtasks ,這個指令的功能是執行工作排程器裡面的工作, 相關的指令是下 schtasks /run /tn name-you-gave-the-task-above 。 如此一來你能執行的也只有你預先在排程中設定的工作,密碼也只有這個工作有被設定過,相對來說安全很多。

參考網址: https://superuser.com/questions/581548/runas-savecred-ask-for-password-if-another-user-runs-the-same-batch-file

2017年10月26日 星期四

CRT程式庫與靜態程式庫

最近為了寫一個與IE有關的程式用VC來開發
但是呢,為了將64與32的程式放在一起所以要使用靜態程式庫的方式
因為這兩個要用的DLL同名所以要分開放

找了半天都看不是很懂網路上介紹的方式
後來找到微軟的網頁
才把這個功能搞定, 紀錄一下以免以後忘了
一般來說要使用靜態程式庫要在專案的屬性頁找到執行階段程式庫這個設定


使用/MT 或 /MTd 就可以讓大部份的程式變成不需要額外的DLL就可以執行
因為VC有將大部分的LIB包含進來

但是如果要使用的程式庫不是預設的就要自己加
我要用的是 vcruntime 這個程式庫所以就要查剛剛那個網頁
找到連結器的其他相依性來設定需要用到的 LIB 檔案
如此就可以編譯過了

例外要注意的是除錯版本微軟都有標示不可轉散發
所以為了避免有相關的問題還是使用Release的版本

2016年8月18日 星期四

當程式想要編譯成單一執行檔時需要做以下的設定
1. 將設定裡面 Linker 中的 "Dynamic RTL" 關掉
2. 將設定裡面 Packages 中的 "Link with runtime packages"關掉

但是在 XE10 這樣子是不夠的,
因為這樣做了之後執行程式還是會跳出需要 "BORLNDMM.DLL" 的訊息

有幾個處理辦法
1. 升級成 update1
2. 將設定中的 Use "classic" Borland compiler 關掉
3. 重新產生一個 "memmgr.lib"

第一個辦法因為還要升級費所以不可行..  HotFix也沒出就出Update檔
可以還要買授權, 越來越覺得不該使用Embarcadero了

第二個辦法是關掉後卻會產生其他的 Error, 暫時不想解決這些問題, 所以也不管他

第三個辦法的作法如下
  1. 使用impdef 將 borlndmm.dll 的定義檔匯出成memmgr.def
        impdef memmgr.def borlndmm.dll
  2. 使用編輯軟體編輯memmgr.def
  3. 將以下幾行用分號註解掉
;    __dbk_fcall_wrapper            @2   ; __dbk_fcall_wrapper

;    dbkFCallWrapperAddr            @1   ; dbkFCallWrapperAddr

  4. 使用implib 將 memmgr.def 產生成 memmgr.lib並覆蓋掉舊的
      (舊的記得備份)

C++ Builder 產生單一執行檔的方法

當程式想要編譯成單一執行檔時需要做以下的設定
1. 將設定裡面 Linker 中的 "Dynamic RTL" 關掉
2. 將設定裡面 Packages 中的 "Link with runtime packages"關掉

但是在 XE10 這樣子是不夠的,
因為這樣做了之後執行程式還是會跳出需要 "BORLNDMM.DLL" 的訊息

有幾個處理辦法

1. 升級成 update1
2. 將設定中的 Use "classic" Borland compiler 關掉
3. 重新產生一個 "memmgr.lib"

第一個辦法因為還要升級費所以不可行..  HotFix也沒出就出Update檔

可以還要買授權, 越來越覺得不該使用Embarcadero了

第二個辦法是關掉後卻會產生其他的 Error, 暫時不想解決這些問題, 所以也不管他


第三個辦法的作法如下

  1. 使用impdef 將 borlndmm.dll 的定義檔匯出成memmgr.def
        impdef memmgr.def borlndmm.dll
  2. 使用編輯軟體編輯memmgr.def
  3. 將以下幾行用分號註解掉
;    __dbk_fcall_wrapper            @2   ; __dbk_fcall_wrapper

;    dbkFCallWrapperAddr            @1   ; dbkFCallWrapperAddr

  4. 使用implib 將 memmgr.def 產生成 memmgr.lib並覆蓋掉舊的
      (舊的記得備份)

2016年5月9日 星期一

eclipse 安裝Android SDK 後出現的錯誤

在eclipse安裝了最新的Android SDK的時候就跳出了這個問題,



解決方法1 就是把叫出 Android SDK Manager 把這兩個package刪了

  • Android Wear ARM EABI v7a System Image
  • Android Wear Intel x86 Atom System Image


解決方法2 就是將發生問題的兩個xml內有 " d:skin " 的那一行刪掉, 不過這個我沒試過

2016年2月4日 星期四

IIS7 與 Tomcat整合(use isapi_redirect.dll)

因為想要在一台電腦上同時執行 ASPX 與 JSP
而只能使用80 PORT,
所以只能透過IIS 來轉發 request到tomcat
使用的Tomcat版本是8.0

方法如下:
1.下載 The Apache Tomcat Connectors  我下載的版本是1.2.40
    可以得到 isapi_redirect.dll , 我是放在 c:\tomcat8\bin\

2.設定connector
   根據官網的文件 isapi_redirect 的設定方式有兩種
     (1) registry setting
          在HKLM\SOFTWARE\Apache Software Foundation\Jakarta Isapi Redirector\1.0
          新增最少以下資訊
          extension_uri:/jakarta/isapi_redirect.dll  (固定值)
     log_file: c:/tomcat8/logs/isapi_redirect.log
     log_level: info
     worker_file: c:/tomcat8/conf/workers.properties (workers設定檔的位置)
     worker_mount_file: C:/tomcat8/conf/uriworkermap.properties (uri對照的mapping)

  (2)isapi_redirect.properties
     設定同上, 不過我試的結果是沒有用, 所以用第一種方法
     #固定值
     extension_uri=/jakarta/isapi_redirect.dll
     #log檔放的位置可以依日期來當檔名可以參考官網設定
     log_file=c:/tomcat8/logs/isapi_redirect.log
     #log的記錄內容有 debug, info, warn, error, trace
     log_level=info
     #worker設定檔的位置
     worker_file=c:/tomcat8/conf/workers.properties
     #worker uri mapping對照檔的位置
     worker_mount_file=C:/tomcat8/conf/uriworkermap.properties

3.建立workers.properties文件
  官網worker參數設定
  #隨便設定, 但是要跟等等設定的 uriworkermap.properties一致就好
  worker.list=jspWorker
  #可以是ajp13, ajp14, jni, lb 或是 status 
  #不過以下的設定需要跟server.xml的connector的設定一致
  worker.geloinWorker.type=ajp13
  #tomcat server所在的電腦
  worker.geloinWorker.host=localhost

  worker.geloinWorker.port=8009

4.設定uriworkermap.properties
  詳細設定要參考官網的uri設定
  這邊要跟workers.properties的 worker.list設定一致
  /*.jsp=jspWorker
  /test/*=jspWorker

IIS設定
1.先建立一個跟isapi_redirect.properties的 extension_uri一致的虛擬目錄
  設定到isapi_redirect.dll所在位置
2.設定處理常式對應 -> 編輯功能權限 設為執行

3.為網站新增ISAPI篩選器
4.幫SERVER設定ISAPI及CGI限制新增 JAKARTA
5.記得將W3SVC重啟

參考資料:
1. https://tomcat.apache.org/connectors-doc/
2. http://www.cnblogs.com/meizhouxiang/p/3977474.html

2015年9月30日 星期三

更新工具到C++Builder10 Seattle

最近將開發工具更新到C++Builder Seattle, 原來現在已經不使用make指令來編譯專案
而是改使用微軟提供的MSBuild指令
大致上的作法是先使用 RAD Studio Command Prompt 來使用相關的command line 環境
然後使用 MSBuild XXX.cbproj 就可以使用command line來編譯程式

可以參考以下的資料
MSBuild Overview
Building a Project Using an MSBuild Command
http://ithelp.ithome.com.tw/question/10107277