版安裝配置與排錯指南)
簡介《瑞美4.79客戶端 單機(jī)版》面向需要獨(dú)立運(yùn)行實(shí)驗(yàn)室信息系統(tǒng)LIS的醫(yī)療機(jī)構(gòu)、檢驗(yàn)科技術(shù)人員及系統(tǒng)維護(hù)人員用于與瑞美LIS進(jìn)行數(shù)據(jù)交互覆蓋樣本采集、檢測、結(jié)果分析、報告生成與數(shù)據(jù)存儲等環(huán)節(jié)適合單機(jī)環(huán)境下開展檢驗(yàn)業(yè)務(wù)與系統(tǒng)功能了解。資源包為 rar 格式大小約133.27MB文件總數(shù)與類型明細(xì)上游暫無數(shù)據(jù)具體內(nèi)容以壓縮包為準(zhǔn)。頁面顯示已有1815人學(xué)習(xí)具備一定參考熱度。軟件強(qiáng)調(diào)直觀界面、實(shí)時數(shù)據(jù)同步、樣本與檢驗(yàn)項(xiàng)目管理、質(zhì)控和自定義報表等能力并兼顧傳輸存儲安全及與實(shí)驗(yàn)室設(shè)備的對接。讀者可借此了解客戶端的功能模塊、工作流組織與單機(jī)部署形態(tài)為醫(yī)療實(shí)驗(yàn)室信息化學(xué)習(xí)和日常業(yè)務(wù)認(rèn)知提供參考。1. 一臺剛重裝的 Windows 10瑞美4.79客戶端 單機(jī)版為什么總在「干凈機(jī)器」上翻車上周又碰到一臺剛重裝完的機(jī)器系統(tǒng)干干凈凈驅(qū)動齊全裝上瑞美4.79客戶端 單機(jī)版雙擊圖標(biāo)轉(zhuǎn)兩圈就彈出一個連不上數(shù)據(jù)庫的框。這臺機(jī)器并非孤例單機(jī)版聽起來最省事——一臺電腦、一個本地庫、一個客戶端不需要服務(wù)器、不需要網(wǎng)絡(luò)但它恰恰最容易在「干凈系統(tǒng)」上出問題因?yàn)楦蓛粢馕吨\(yùn)行庫沒裝、實(shí)例沒起、權(quán)限沒給、端口沒放行而這些事平時都被別人做完了。瑞美客戶端這類帶本地?cái)?shù)據(jù)庫的行業(yè)軟件裝不好不會報「你少裝了個組件」只會給你一句籠統(tǒng)的連接失敗剩下的全靠自己排查。這篇筆記是寫給正準(zhǔn)備在一臺單機(jī)上裝 4.79 的人新手能照著走完熟手能直接跳到版本對照表和排錯那章。2. 環(huán)境清單先列死跑瑞美客戶端 4.79 單機(jī)版需要的系統(tǒng)、運(yùn)行庫與數(shù)據(jù)庫裝這類客戶端最怕的就是「先裝了再說」。4.79 這個版本號不算新它的安裝器、組件注冊方式、對數(shù)據(jù)庫的依賴都帶著明顯的上一代痕跡先花二十分鐘把環(huán)境對齊能省掉后面兩小時的返工。這一章把要確認(rèn)的東西按優(yōu)先級排一遍系統(tǒng)與位數(shù)、運(yùn)行庫、數(shù)據(jù)庫引擎形態(tài)、目錄與賬號權(quán)限最后加一道回滾保險。2.1 操作系統(tǒng)、位數(shù)與運(yùn)行庫的對照表單機(jī)版的客戶端主程序絕大多數(shù)是 32 位編譯的跑在 64 位系統(tǒng)上靠 WOW64 兼容層功能上沒問題但會帶來兩個副作用一是安裝器默認(rèn)往Program Files (x86)寫二是它注冊的某些 32 位組件在 64 位注冊表視圖里看不見排查時容易找錯位置。系統(tǒng)選擇上我一般優(yōu)先 Windows 10 專業(yè)版21H2 之后的版本都行專業(yè)版的意義在于組策略、本地用戶與組、防火墻高級設(shè)置都能用家庭版不是不能跑而是出問題時少了一半的排查手段。如果必須遷就老機(jī)器上的 Windows 7 SP1那要先確認(rèn)補(bǔ)丁打全尤其是 SHA-2 簽名支持那個補(bǔ)丁否則新版安裝器直接拒絕啟動。運(yùn)行庫這塊常見做法是把 .NET Framework 3.5 和 4.x 都備上。4.x 在 Win10 里通常自帶 4.8但 3.5 是「按需功能」默認(rèn)關(guān)閉很多老客戶端的報表控件、打印組件依賴它。VC 運(yùn)行庫更雜2005 到 2015-2022 這一串建議一次性裝齊缺哪個 dll 的報錯往往出現(xiàn)在安裝快結(jié)束的時候最耽誤事。先用兩條命令把現(xiàn)狀摸清楚# 確認(rèn)系統(tǒng)版本、位數(shù)與產(chǎn)品名判斷是否落在支持矩陣?yán)?Get-ComputerInfo | Select-Object OsName, OsVersion, OsArchitecture, WindowsProductName # 檢查 .NET Framework 3.5 是否已啟用老客戶端里這是硬依賴不是可選項(xiàng) Get-WindowsOptionalFeature -Online -FeatureName NetFx3 | Select-Object FeatureName, State # 讀取 4.x 的 Release 值比看目錄名靠譜 Get-ItemProperty HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full | Select-Object Version, ReleaseGet-WindowsOptionalFeature的State如果是Disabled用Enable-WindowsOptionalFeature -Online -FeatureName NetFx3 -All打開這條命令需要聯(lián)網(wǎng)拉取源或者指定本地 install.wim離線機(jī)器上要提前準(zhǔn)備好。Release值對照微軟的版本表看528040 往上就是 4.8低于這個數(shù)說明系統(tǒng)補(bǔ)丁不全。VC 運(yùn)行庫可以用一段循環(huán)靜默裝完省得一個個點(diǎn)下一步# 把安裝包目錄里帶的 VC 運(yùn)行庫按順序靜默裝齊/q /norestart 表示靜默且不自動重啟 $vcRedists ( vcredist2008_x86.exe, vcredist2010_x86.exe, vcredist2012_x86.exe, vcredist2013_x86.exe, VC_redist.x86.exe ) foreach ($pkg in $vcRedists) { if (Test-Path $pkg) { Write-Host installing $pkg Start-Process -FilePath $pkg -ArgumentList /q, /norestart -Wait } else { Write-Warning missing: $pkg } }這里的-Wait是關(guān)鍵不加的話循環(huán)會把五個安裝器同時拉起來互相搶占安裝鎖最后裝出半殘的運(yùn)行庫報錯還是那句「應(yīng)用程序無法正常啟動 0xc000007b」。裝完順手用Get-ChildItem C:\Windows\System32\msvcp*.dll看一眼文件時間能大致確認(rèn)版本號。2.2 數(shù)據(jù)庫引擎本地實(shí)例還是文件型庫單機(jī)版的「單機(jī)」兩個字最容易讓人誤解成不用管數(shù)據(jù)庫。實(shí)際上 4.79 這類客戶端的本地庫通常有兩種形態(tài)一種是安裝包里自帶 SQL Server Express 安裝程序裝的時候順手建一個SQLEXPRESS實(shí)例另一種是只帶.mdf/.ldf文件要求機(jī)器上已有實(shí)例裝完手動附加。開工前先判斷屬于哪種判斷方法很土但有效——解壓安裝包看有沒有SQLEXPRESS目錄或者setup.exe體積上百兆的數(shù)據(jù)庫安裝器。如果機(jī)器上已有實(shí)例先確認(rèn)服務(wù)狀態(tài)和端口# 列出本機(jī)所有 SQL Server 相關(guān)服務(wù)看清楚是默認(rèn)實(shí)例還是命名實(shí)例 Get-Service | Where-Object { $_.Name -like MSSQL* } | Select-Object Name, DisplayName, Status, StartType # 查 TCP 配置TcpDynamicPorts 有值說明實(shí)例在用動態(tài)端口重啟一次變一次 Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\*\MSSQLServer\SuperSocketNetLib\Tcp\IPAll -ErrorAction SilentlyContinue | Select-Object TcpPort, TcpDynamicPorts動態(tài)端口是后面第 4 章埋雷的根源客戶端配置里寫死了端口號實(shí)例一重啟換端口就全斷??吹絋cpDynamicPorts有值、TcpPort為空就先記下來裝完統(tǒng)一改成固定端口。另外要注意命名實(shí)例的連接寫法是.\SQLEXPRESS或者localhost\SQLEXPRESS寫成localhost是連默認(rèn)實(shí)例連不上很正常。如果安裝包要求機(jī)器上已有實(shí)例而機(jī)器上沒有那就得先裝 Express 版本。裝的時候選「混合身份驗(yàn)證」設(shè)置 sa 密碼實(shí)例名建議就用默認(rèn)的SQLEXPRESS——很多客戶端的連接配置里實(shí)例名是預(yù)置的改成別的還得自己去配置文件里翻。2.3 目錄規(guī)劃、賬號與權(quán)限的準(zhǔn)備工作安裝路徑這件事值得單獨(dú)說。默認(rèn)裝到C:\Program Files (x86)\...的人后面八成會碰到兩個問題一是 UAC 虛擬化把寫配置文件的動作重定向到VirtualStore你改了安裝目錄下的 ini 發(fā)現(xiàn)不生效因?yàn)槌绦蜃x的是虛擬化后的那份二是數(shù)據(jù)文件跟著裝在系統(tǒng)盤機(jī)器一重裝全丟。我一般固定用一個短路徑程序、數(shù)據(jù)、備份、日志分成四個子目錄# 程序與數(shù)據(jù)分開方便整體搬遷也方便單獨(dú)給數(shù)據(jù)目錄做備份策略 $root D:\RM479 New-Item -ItemType Directory -Force -Path $root\App, $root\Data, $root\Backup, $root\Log | Out-Null # 給普通用戶讀寫權(quán)限避免客戶端以非管理員身份運(yùn)行時寫日志、寫臨時表失敗 icacls $root /grant Users:(OI)(CI)M /T(OI)(CI)M的含義是對象繼承加容器繼承的修改權(quán)限比直接給「完全控制」安全一點(diǎn)又不至于連日志都寫不進(jìn)去。安裝階段用本地管理員賬號裝完之后日常使用建議換普通賬號跑一遍確認(rèn)沒有權(quán)限問題——很多寫字樓里用的就是受限賬號裝的時候用管理員、用的時候用受限賬號這個組合不驗(yàn)證一遍交付當(dāng)天就要被叫回去。2.4 安裝前的快照與回滾點(diǎn)單機(jī)版沒有服務(wù)器可以回滾裝壞了就是整臺機(jī)器重來所以裝之前留一個還原點(diǎn)是性價比最高的動作。虛擬機(jī)直接打快照物理機(jī)用系統(tǒng)還原點(diǎn)順手把注冊表相關(guān)分支導(dǎo)出一份卸載殘留的時候能對比出來少了什么。# 創(chuàng)建系統(tǒng)還原點(diǎn)前提是系統(tǒng)保護(hù)已在該盤開啟 Checkpoint-Computer -Description Before-RM479-Install -RestorePointType MODIFY_SETTINGS # 導(dǎo)出 32 位視圖的軟件注冊表分支卸載不干凈時可以逐項(xiàng)比對 reg export HKLM\SOFTWARE\WOW6432Node D:\RM479\Backup\reg_wow6432node_before.reg /yCheckpoint-Computer有個限制默認(rèn) 24 小時內(nèi)只能創(chuàng)建一次還原點(diǎn)重復(fù)執(zhí)行會直接返回但不生效別以為沒報錯就是成功了用Get-ComputerRestorePoint確認(rèn)一下時間戳。做完這步再開始動安裝包。3. 安裝全過程把 4.79 單機(jī)版從壓縮包裝到能彈出登錄框環(huán)境確認(rèn)完接下來是按順序落地。這一章的順序不能亂先校驗(yàn)安裝包再解壓到干凈路徑然后處理數(shù)據(jù)庫最后裝客戶端主程序。順序顛倒的典型后果是先裝了客戶端連接配置指向一個還不存在的庫程序啟動時直接崩在初始化階段日志里什么都沒有排查起來屬于黑匣子級別的痛苦。3.1 安裝包校驗(yàn)與解壓路徑拿到安裝包第一件事不是雙擊是校驗(yàn)。壓縮包傳輸中斷、網(wǎng)盤下載被截?cái)噙@類問題在安裝到 80% 的時候才爆出來報錯還往往是「寫入文件失敗」跟權(quán)限問題長得一模一樣浪費(fèi)大量時間。# 計(jì)算 MD5與資源提供方給出的值對比不一致就別往下走了 Get-FileHash -Algorithm MD5 -Path .\RM479_Setup.zip | Format-List # 解壓到短路徑不要有中文、空格、括號、感嘆號老安裝器解析路徑會出錯 Expand-Archive -Path .\RM479_Setup.zip -DestinationPath D:\RM479\src -Force-Force會覆蓋同名文件第一次解壓其實(shí)可以不加讓它報錯提醒目錄非空避免把上一次裝失敗的殘留混進(jìn)來。解壓完Get-ChildItem D:\RM479\src -Recurse | Measure-Object -Property Length -Sum看一眼總大小跟壓縮包對比差太多說明解壓不完整。解壓路徑里帶中文是高頻翻車點(diǎn)尤其是把安裝包放桌面、桌面路徑又是中文用戶名的情況。安裝器在解壓臨時文件時可能用 ANSI 編碼處理路徑中文被截?cái)嗪笞兂蓙y碼目錄后面注冊組件就找不到文件。3.2 數(shù)據(jù)庫實(shí)例初始化與庫文件掛載如果安裝包里帶了.mdf標(biāo)準(zhǔn)流程是先把這兩個文件拷到數(shù)據(jù)目錄再附加。直接原地附加到安裝包目錄回頭清理安裝包就把庫刪了而且安裝包目錄往往在只讀介質(zhì)上。-- 先把 mdf/ldf 拷到 D:\RM479\Data再執(zhí)行附加路徑寫絕對路徑別用相對路徑 USE [master]; GO CREATE DATABASE [RM_DATA] ON (FILENAME ND:\RM479\Data\RM_DATA.mdf), (FILENAME ND:\RM479\Data\RM_DATA_log.ldf) FOR ATTACH; GO -- 附加完立刻核對物理路徑和狀態(tài)ONLINE 才算掛載成功 SELECT name, physical_name, state_desc FROM sys.master_files WHERE database_id DB_ID(RM_DATA);FOR ATTACH要求兩個文件都存在缺日志文件的話要用FOR ATTACH_REBUILD_LOG重建重建出來的日志大小是默認(rèn)值跑一段時間記得收縮一次。庫名RM_DATA只是示例實(shí)際要以安裝包里 mdf 的文件名為準(zhǔn)附加時改成的庫名必須和客戶端連接配置里寫的一致這一條對不上客戶端就是連不上。接著啟用混合身份驗(yàn)證并建一個應(yīng)用賬號別直接用 sa-- 建一個只在本庫有權(quán)限的應(yīng)用賬號客戶端用這個連sa 留作應(yīng)急 CREATE LOGIN rm_app WITH PASSWORD N換成一個強(qiáng)密碼, CHECK_POLICY OFF; GO USE [RM_DATA]; GO CREATE USER rm_app FOR LOGIN rm_app; ALTER ROLE db_datareader ADD MEMBER rm_app; ALTER ROLE db_datawriter ADD MEMBER rm_app; GO -- 開啟混合身份驗(yàn)證LoginMode2改完必須重啟實(shí)例才生效 EXEC xp_instance_regwrite NHKEY_LOCAL_MACHINE, NSoftware\Microsoft\MSSQLServer\MSSQLServer, NLoginMode, REG_DWORD, 2; GOCHECK_POLICY OFF是因?yàn)楹芏嗫蛻舳伺渲梦募锎婷艽a是明文或弱加密密碼策略太嚴(yán)會在重裝或改密后連不上屬于務(wù)實(shí)取舍。改完LoginMode一定要重啟服務(wù)只重啟數(shù)據(jù)庫不夠# 只重啟這一個實(shí)例不影響機(jī)器上其他 SQL 實(shí)例 Restart-Service -Name MSSQL$SQLEXPRESS -Force Start-Sleep -Seconds 5 Get-Service MSSQL$SQLEXPRESS | Select-Object Status3.3 客戶端主程序安裝與首次啟動安裝器可能是 Inno Setup 打包也可能是 NSIS靜默參數(shù)不一樣。不確定的話我一般先手動裝一遍觀察它往哪些目錄寫、注冊了哪些服務(wù)然后再決定要不要做靜默。手動裝的時候注意兩點(diǎn)安裝路徑改成D:\RM479\App安裝類型如果讓選「單機(jī)版 / 網(wǎng)絡(luò)版」務(wù)必選單機(jī)版選錯會導(dǎo)致客戶端去找服務(wù)器。確認(rèn)是 Inno 系的話靜默安裝大致是這樣REM /S 是 Inno Setup 的靜默開關(guān)/D 指定目錄時不能加引號且必須是最后一個參數(shù) REM /NORESTART 防止安裝器自行重啟機(jī)器單機(jī)上重啟一次代價不小 RM479_Setup.exe /S /NORESTART /DD:\RM479\App/D后面不能帶引號這是 Inno 的硬性規(guī)定帶了引號會把引號當(dāng)成路徑的一部分裝出一個名字詭異的目錄。裝完第一次啟動建議用管理員身份運(yùn)行一次目的不是讓它干活而是讓它在注冊表里把 COM 組件、報表控件、打印驅(qū)動這些東西注冊完整之后再用普通賬號跑就不會缺組件。首次啟動如果直接彈出登錄框說明數(shù)據(jù)庫連接已經(jīng)通了如果彈的是錯誤框別急著重裝先去第 5 章對照現(xiàn)象。第一次登錄用的賬號密碼通常在安裝包的說明文件里或者由數(shù)據(jù)庫里預(yù)置的初始數(shù)據(jù)決定登錄進(jìn)去之后第一件事是改密碼。3.4 安裝后的目錄結(jié)構(gòu)核對裝完花兩分鐘核對目錄比出問題再回來翻強(qiáng)得多。單機(jī)版客戶端大致會有這么幾類文件目錄/文件作用是否必須備份App\*.exe主程序與輔助工具否可重裝App\*.ini/*.udl連接配置、打印配置是重裝會覆蓋App\Report\報表模板是模板改動無法恢復(fù)Data\*.mdf/*.ldf賬套數(shù)據(jù)是每日備份Backup\自動備份落盤位置定期轉(zhuǎn)移到其他介質(zhì)Log\運(yùn)行日志保留 7 天即可# 核對關(guān)鍵文件是否齊全重點(diǎn)看 ini、udl、報表模板有沒有落地 Get-ChildItem D:\RM479\App -Recurse -Include *.exe, *.dll, *.ini, *.udl | Select-Object FullName, Length, LastWriteTime | Sort-Object FullNameLastWriteTime在這里很有用如果所有文件時間都是安裝包里的原始時間說明安裝器只是解壓如果有幾個文件時間是剛才說明它們在安裝過程中被改寫或生成那多半就是配置文件值得優(yōu)先看一眼內(nèi)容。4. 配置收口連接串、1433 端口和授權(quán)文件這三處必須一次改對裝完能彈登錄框只是及格線。真正決定這套單機(jī)版能不能長期穩(wěn)定跑的是配置這一層。連接串寫錯一個字符、端口留在動態(tài)模式、授權(quán)文件放在臨時目錄這三個問題不會在安裝當(dāng)天暴露而是在某個周一早上集中爆發(fā)而且癥狀千奇百怪。4.1 連接配置三個參數(shù)決定能不能連上客戶端的連接配置通常落在 ini 或者 udl 文件里也可能寫在注冊表。先在安裝目錄里搜一遍找到之后按下面這種方式組織[Database] ; 單機(jī)版填 .\SQLEXPRESS不要填機(jī)器名改機(jī)器名、加域、換網(wǎng)絡(luò)后機(jī)器名解析會失敗 Server.\SQLEXPRESS ; 庫名必須與附加時的庫名完全一致包含大小寫 DatabaseRM_DATA ; 用應(yīng)用賬號而不是 sa方便后續(xù)單獨(dú)收權(quán)限 Userrm_app Password安裝時設(shè)定的密碼 ; 首次連接要建連、加載元數(shù)據(jù)機(jī)械盤老機(jī)器給 5 秒會誤報失敗 Connect Timeout15Server這個參數(shù)是踩坑最多的地方。寫localhost連的是默認(rèn)實(shí)例寫機(jī)器名依賴名稱解析寫 IP 依賴端口固定只有.\SQLEXPRESS或者127.0.0.1,1433是相對穩(wěn)妥的。如果實(shí)例名不是SQLEXPRESS就老老實(shí)實(shí)寫.\實(shí)例名。Connect Timeout默認(rèn)通常是 15 秒有些客戶端模板里被寫成 5 秒。單機(jī)版首次啟動要加載報表模板、初始化緩存5 秒在某些老機(jī)器上確實(shí)不夠表現(xiàn)出來就是「第一次打不開第二次就好了」這種很怪的現(xiàn)象容易被當(dāng)成玄學(xué)。改完配置用 sqlcmd 單獨(dú)驗(yàn)證一次賬號能不能連把客戶端問題和數(shù)據(jù)庫問題分開# 用客戶端將要使用的賬號連一次驗(yàn)證賬號、庫名、身份驗(yàn)證模式三件事 sqlcmd -S .\SQLEXPRESS -d RM_DATA -U rm_app -P 密碼 -Q SELECT DB_NAME() AS db, SUSER_NAME() AS login -h -1輸出里db和login都對說明數(shù)據(jù)庫這一側(cè)沒問題連不上就只能是客戶端配置或組件問題。4.2 端口與防火墻本機(jī)也要放行單機(jī)版聽起來不需要網(wǎng)絡(luò)但客戶端連本地實(shí)例走的仍然是 TCP防火墻和第三方安全軟件照樣會攔。第一步是把實(shí)例端口固定下來# MSSQL12.SQLEXPRESS 中的 12 是實(shí)例 ID實(shí)際值要先查注冊表確認(rèn)別照抄 $instPath HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQLServer\SuperSocketNetLib\Tcp\IPAll Set-ItemProperty -Path $instPath -Name TcpPort -Value 1433 Set-ItemProperty -Path $instPath -Name TcpDynamicPorts -Value Restart-Service MSSQL$SQLEXPRESS -Force把TcpDynamicPorts置空是關(guān)鍵動作只設(shè)TcpPort不清空動態(tài)端口實(shí)例可能兩個都用重啟后又漂走。第二步放行防火墻# 入站放行 1433本機(jī)回環(huán)連接也受這條規(guī)則約束 New-NetFirewallRule -DisplayName RM479 SQL 1433 In -Direction Inbound -Protocol TCP -LocalPort 1433 -Action Allow -Profile Any # 確認(rèn)監(jiān)聽狀態(tài)State 是 Listen 才算真的起來了 Get-NetTCPConnection -LocalPort 1433 -State Listen | Select-Object LocalAddress, LocalPort, OwningProcess第三方安全軟件不認(rèn) Windows 防火墻規(guī)則它們有自己的驅(qū)動層攔截。現(xiàn)象是防火墻關(guān)了也連不上但用sqlcmd在服務(wù)端本地又一切正常這時候去安全軟件的網(wǎng)絡(luò)防護(hù)里給客戶端主程序加白名單。4.3 授權(quán)注冊與使用人切換單機(jī)版的授權(quán)一般是機(jī)器碼加授權(quán)文件的形式。注冊前先把機(jī)器碼抄下來注冊完成后把授權(quán)文件連同機(jī)器碼一起歸檔到Backup目錄——換硬件、重裝系統(tǒng)之后沒有原始機(jī)器碼對照售后那邊對不上只能重新申請。授權(quán)文件不要放在臨時目錄或者桌面客戶端重裝、系統(tǒng)清理都會帶走。我一般放在D:\RM479\Backup\license\并在客戶端配置里指向這個路徑。如果同一臺機(jī)器要切換使用人注意有些單機(jī)版授權(quán)是綁定 Windows 賬號的切換賬號后提示未授權(quán)解決辦法不是重新注冊而是把授權(quán)文件復(fù)制到新賬號有權(quán)限讀取的公共目錄再在新賬號下重新指定路徑。4.4 開機(jī)自啟、打印組件與共享目錄單機(jī)版也要考慮開機(jī)自啟但不要用啟動項(xiàng)。啟動項(xiàng)和數(shù)據(jù)庫服務(wù)是并行拉起的客戶端比數(shù)據(jù)庫先起來就會卡在連接失敗。用計(jì)劃任務(wù)加延遲更穩(wěn)# 登錄后延遲 30 秒再啟動客戶端等 SQL Server 實(shí)例完全起來 $action New-ScheduledTaskAction -Execute D:\RM479\App\RMClient.exe -WorkingDirectory D:\RM479\App $trigger New-ScheduledTaskTrigger -AtLogOn $trigger.Delay PT30S Register-ScheduledTask -TaskName RM479 Client Autostart -Action $action -Trigger $trigger -RunLevel Highest -ForcePT30S是 ISO 8601 時長格式意思是 30 秒。老機(jī)器上建議給到 60 秒機(jī)械硬盤啟動 SQL 實(shí)例確實(shí)慢。打印這一塊常見問題是報表模板里的紙張大小和打印機(jī)實(shí)際紙張不一致導(dǎo)致的癥狀是打印出來內(nèi)容偏移或者被截?cái)?。裝完先進(jìn)「打印設(shè)置」把默認(rèn)紙張、邊距、打印機(jī)型號確認(rèn)一遍再打一張預(yù)覽別等到業(yè)務(wù)人員打單據(jù)的時候才發(fā)現(xiàn)。共享打印機(jī)要保存憑據(jù)否則每次重啟都要重新輸入。5. 排錯與避坑瑞美4.79單機(jī)版五個高頻翻車現(xiàn)場下面這幾條都是實(shí)際裝機(jī)時反復(fù)遇到的癥狀看起來五花八門根因其實(shí)都集中在環(huán)境、權(quán)限、配置三處。每條按「現(xiàn)象—原因—解決」寫方便對照。5.1 啟動即報數(shù)據(jù)庫連接失敗但服務(wù)明明是起來的現(xiàn)象雙擊客戶端轉(zhuǎn)兩圈彈出「無法連接數(shù)據(jù)庫」去服務(wù)里看MSSQL$SQLEXPRESS狀態(tài)是「正在運(yùn)行」用 sqlcmd 在服務(wù)器本地連又能連上。原因服務(wù)在跑不代表 TCP 協(xié)議在監(jiān)聽。SQL Express 默認(rèn)可能只開了共享內(nèi)存和命名管道TCP/IP 協(xié)議是禁用的客戶端走 TCP 就連不上。另一種情況是實(shí)例在動態(tài)端口上客戶端配置里寫死 1433實(shí)際監(jiān)聽在 5 萬多的端口。解決先用Get-NetTCPConnection -State Listen | Where-Object LocalPort -gt 1024看實(shí)例到底在哪個端口。然后去 SQL Server 配置管理器里把 TCP/IP 協(xié)議啟用或直接改注冊表Tcp\Enabled為 1固定端口后重啟實(shí)例。改完用Test-NetConnection 127.0.0.1 -Port 1433驗(yàn)證TcpTestSucceeded為 True 才算通。5.2 能登進(jìn)去但報表預(yù)覽和打印全是空白現(xiàn)象主界面正常單據(jù)能錄點(diǎn)「打印預(yù)覽」彈出來的窗口一片空白或者直接閃退。原因報表控件是 32 位 COM 組件注冊信息落在WOW6432Node下。安裝時如果用了非管理員賬號或者安裝器被 UAC 攔了組件注冊控件就沒注冊成功。另一種原因是 .NET Framework 3.5 沒啟用老報表引擎依賴它做渲染。解決用管理員身份的 cmd 重新注冊一遍控件路徑以安裝目錄里的 dll 為準(zhǔn)regsvr32 /s D:\RM479\App\Report\xxxReport.dll。注冊完用Get-ItemProperty HKLM:\SOFTWARE\WOW6432Node\Classes\CLSID\{...}確認(rèn)鍵存在。如果還是空白回頭把 NetFx3 打開再試。5.3 授權(quán)反復(fù)失效換臺機(jī)器就不認(rèn)現(xiàn)象裝好的當(dāng)天授權(quán)正常過幾天提示「未授權(quán)或授權(quán)已過期」重啟也不恢復(fù)。原因授權(quán)綁定的是硬件指紋網(wǎng)卡、主板、硬盤序列號任一變化都會觸發(fā)重新校驗(yàn)。筆記本切換有線無線網(wǎng)卡、加了塊硬盤、用了某些虛擬網(wǎng)卡軟件都可能讓指紋變化。解決注冊前把機(jī)器碼和授權(quán)文件一起歸檔出現(xiàn)失效時先對比當(dāng)前機(jī)器碼和歸檔的是否一致。一致就說明是校驗(yàn)服務(wù)或時間問題檢查系統(tǒng)時間是否被同步錯不一致就說明硬件變了需要重新走授權(quán)流程。別急著重裝客戶端重裝解決不了指紋問題。5.4 中文亂碼、日期和金額格式錯位現(xiàn)象界面里中文顯示成方塊或問號日期顯示成2024/1/1而不是習(xí)慣的格式金額小數(shù)點(diǎn)位置不對。原因Windows 區(qū)域設(shè)置里的「非 Unicode 程序的語言」不是中文簡體或者數(shù)據(jù)庫排序規(guī)則不是Chinese_PRC_CI_AS。單機(jī)版客戶端大量使用 ANSI 接口區(qū)域設(shè)置不對就直接亂碼。解決控制面板里把「非 Unicode 程序的語言」改成中文簡體中國重啟機(jī)器。數(shù)據(jù)庫側(cè)用SELECT SERVERPROPERTY(Collation)查排序規(guī)則如果建庫時選錯了改排序規(guī)則需要重建庫代價很大所以裝之前就該確認(rèn)。金額格式問題一般是區(qū)域設(shè)置里的小數(shù)位和千分位符號不對一起改掉。5.5 卸載重裝后舊配置殘留新裝的一樣連不上現(xiàn)象舊版本卸了裝 4.79配置界面里顯示的路徑、實(shí)例名、賬號還是舊的改了也不生效。原因卸載程序只刪了程序目錄配置文件、注冊表項(xiàng)、ProgramData下的數(shù)據(jù)目錄都留著。新裝的客戶端讀取時優(yōu)先讀了殘留配置。解決卸載之后手動清理三處——安裝目錄、C:\ProgramData\廠商目錄、注冊表里的HKLM\SOFTWARE\WOW6432Node\廠商鍵。清理前先導(dǎo)出備份萬一新裝也失敗還能還原回去。這也是第 2 章導(dǎo)出注冊表的意義所在。6. 交付前的驗(yàn)證三步自檢確認(rèn) 4.79 單機(jī)版真的跑通了裝完能雙擊打開不等于交付完成。我給自己定了一套三分鐘自檢跑完這三步才敢把機(jī)器交出去。第一步是服務(wù)與端口腳本一把梭# 交付自檢服務(wù)狀態(tài)、端口可達(dá)、賬號能連庫三件事一次跑完 $svc Get-Service MSSQL$SQLEXPRESS $port Test-NetConnection -ComputerName 127.0.0.1 -Port 1433 -WarningAction SilentlyContinue Write-Host (服務(wù):{0} 端口:{1} -f $svc.Status, $port.TcpTestSucceeded) # 用應(yīng)用賬號查一次系統(tǒng)表數(shù)量能返回?cái)?shù)字說明權(quán)限和連接都正常 sqlcmd -S .\SQLEXPRESS -d RM_DATA -U rm_app -P 密碼 -Q SELECT COUNT(*) FROM sys.tables -h -1第二步是業(yè)務(wù)流程驗(yàn)證用一個測試賬號登進(jìn)去錄一張完整的單據(jù)從新增到保存到審核然后打開報表預(yù)覽、點(diǎn)一次打印。這一步能同時暴露權(quán)限、報表控件、打印驅(qū)動三類問題比單看界面有效得多。第三步是備份還原演練先做一次手動備份再把備份文件還原到一個臨時庫確認(rèn)備份文件可用。檢查項(xiàng)通過標(biāo)準(zhǔn)不通過先看哪里實(shí)例服務(wù)狀態(tài) Running、啟動類型 自動服務(wù)依賴、事件查看器應(yīng)用日志端口監(jiān)聽1433 處于 ListenTCP 協(xié)議是否啟用、動態(tài)端口賬號連通sqlcmd 返回表數(shù)量身份驗(yàn)證模式、庫權(quán)限業(yè)務(wù)操作單據(jù)新增保存審核全通應(yīng)用賬號是否有寫權(quán)限報表打印預(yù)覽有內(nèi)容、打印不偏移報表控件注冊、默認(rèn)紙張備份還原備份文件能還原到臨時庫備份目錄權(quán)限、磁盤空間備份還原這步最容易被跳過也最容易在真出事的時候后悔。單機(jī)版沒有 DBA備份就是最后一道保險交付時順便把自動備份的計(jì)劃任務(wù)配上每天凌晨執(zhí)行保留 7 天。從那以后我每次裝這類單機(jī)版都強(qiáng)制走一遍「環(huán)境對照表 → 快照 → 安裝 → 自檢」的完整流程哪怕對方催得再急快照和自檢這兩步也不省。省下來的十分鐘往往要用一整天去填。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取