我的service程序在windows XP 和 windows2003下工作正常。但是在vista和windows2008下安裝的時(shí)候總是在啟動(dòng)service這一步的時(shí)候失敗。一直沒(méi)有找到原因。這兩天集中精力,終于找到了原因,但是卻解決不了這個(gè)問(wèn)題。
做了如下幾個(gè)測(cè)試:
(1)把ServiceMain開(kāi)始部分做成一個(gè)console程序,運(yùn)行OK,這說(shuō)明主要部分代碼邏輯沒(méi)有問(wèn)題。
(2)去掉ServiceMain()中的大部分功能代碼,做一個(gè)簡(jiǎn)單的service,運(yùn)行OK,這說(shuō)明原來(lái)的service安裝和啟動(dòng)部分代碼也沒(méi)有問(wèn)題。
(3)分步排除各個(gè)dll。
最后發(fā)現(xiàn)導(dǎo)致無(wú)法啟動(dòng)的罪魁禍?zhǔn)拙尤皇莑ibmysql.dll,我如果在程序中屏蔽掉所有mysql的調(diào)用,等于程序啟動(dòng)的時(shí)候不加載libmysql.dll,那么就可以順利啟動(dòng),接著更換到最新的libmysql.dll(版本5.0.67),仍然是啟動(dòng)不成功;后來(lái)切換到一個(gè)同事的老版本libmysql.dll,居然可以啟動(dòng)成功。5.0.67版本libmysql.dll (opt)的大小是2M多,而我同事的那個(gè)libmysql.dll才1M多,難道他的版本是mysql4.x ?
究竟是什么原因?qū)е逻@個(gè)問(wèn)題的?