安裝 PrintManager 和 SQL Server 所遇到的問題
2024-08-31 00:48:01
供稿:網友
 
安裝 autodest printmanager 所遇到的問題 / 安裝 sql server 所遇到的問題
  為了參考一下打印服務器的工作流程,特地找了個autodest printmanager 來看看。
  autodest printmanager的安裝步驟:
 
  步驟一.printmanager數據庫安裝
  步驟二.printmanager web站點安裝
  步驟三.printmanager打印服務安裝
  步驟四.注冊
  主要是在“步驟一.printmanager數據庫安裝”碰上了問題。
  問題1:
  printmanager數據庫需要安裝在有sql server的機器上,所以得先安裝sql server。
  安裝sql server2000時,系統彈出一個警告信息框,顯示"以前的某個程序安裝已在安裝計算機上創建掛起的文件操作。運行安裝程序之前必須重新啟動計算機!"。
  重啟后問題依舊。
  于是上google搜索:
  出現最多的文章是"一次sql server 2000 安裝奇遇",但卻不知所云,文章并沒找到問題實質;
  繼續搜索,終于找到答案了,刪除hkey_local_machine ystem/currentcontrolset/control ession manager/pendingfilerenameoperations即可。
  造成問題的直接原因牽涉到一個老問題————psdriver,參看附錄。
  問題2:
  安裝sql server2000后,繼續安裝printmanager數據庫,提示錯誤"[dbnetlib][connection(connect()).]sql server does not exists or access denied."
  查閱printmanagerde文檔,原來是printmanager要求sql server的sa用戶必須設置口令,于是不得不重裝一次sql server。
  由于只是想看看printmanager是如何工作的,所以注冊與否并不重要。不過用softice簡單跟了下,printmanager的注冊保護似乎并不是很復雜,有空時可以試試。
附錄:psdriver的老問題
  psdriver是很久以前的東西了。
  簡單地講,psdriver就是在window2000下,創建一個虛擬打印機,其他的application可以方便地通過這個打印機生成ps文件,再加上acrobat  distillr的配合,就可以生成pdf了。
  現在由于print manager的緣故又把它牽扯出來了,盡管目前涉及的只是個小問題而已。
  psdriver是調用addprinterdriver來安裝打印機的。
  addprinterdriver的調用者只需要把有關的驅動程序拷貝到目錄:%system% pool/drivers/w32x86
  調用addprinterdriver時,系統會把這些文件拷貝到目錄:%system% pool/drivers/w32x86/3
  具體到ppd:
  第一次安裝時,系統把ppd文件拷貝到"%system% ystem32 pool/drivers/w32x86/3"下,并生成一個bpd文件。當重復安裝時,系統會根據ppd文件的修改日期來決定是否更新ppd。如果ppd是新的,替換掉舊的ppd,也就是再拷貝一次;否則,do nothing!
  現在的問題是,如果最開始提供的ppd文件是只讀的話,系統只是拷貝文件,文件屬性不會改變。當需要更新ppd時,因為"%system% ystem32 pool/drivers/w32x86/3"下的ppd也是只讀的,系統拷貝將會失敗!!!
  于是,系統會修改注冊表,在:
  hkey_local_machine ystem/currentcontrolset/control ession manager/
  下寫入一個鍵值:
  pendingfilerenameoperations = "/??/c:/winnt ystem32 pool/drivers/w32x86/3/new/test.ppd/??/c:/winnt ystem32 pool/drivers/w32x86/3/test.ppd/??/c:/winnt ystem32 pool/drivers/w32x86/3/old/test.ppd/??/c:/winnt ystem32 pool/drivers/w32x86/3/old"
  最后的尾巴沒了,可以看出,前面一段是指出在系統重啟時,用c:/winnt ystem32 pool/drivers/w32x86/3/new/test.ppd覆蓋c:/winnt ystem32 pool/drivers/w32x86/3/test.ppd,這樣以達到更新ppd的目的。
  注:這是典型的安裝驅動的處理策略,但在目標文件是可讀的情況下,這樣是行不通的。
  后面一段代碼尾巴沒了,不明所以。
  重啟機器后,實際的情況為:
  pendingfilerenameoperations = "/??/c:/winnt ystem32 pool/drivers/w32x86/3/old/test.ppd"
  顯然這是不合語法的,而且只能手工刪除,正是它的存在,導致了上述sql server的安裝錯誤!!!
  補充一下,這個問題早已經處理過了,就是在安裝時,去掉ppd的只讀屬性即可。現在之所以碰到問題只是因為注冊表里的垃圾沒清理干凈而已。
  過幾天整理一下psdriver,弄一個比較友好的小工具出來。