令人抓狂的一天:FileSystemWatcher,SharpZipLib,虚拟机,IPC及其他
今天忙的事情还真是多啊,如果不是下周一要检查,我才不会这么拼劲呢.
今天上午测试了一个叫MP3Splitter的小程序,发现程序的安装文件夹里面的文件夹仅仅只抓到了一个,觉得甚是诡异.用FileMon观察了一下,发现所有的文件都在那.于是开始怀疑FileSystemWatcer相关的代码了.检查了几个来回发现问题可能出现在没有考虑Rename.有些软件在拷贝或下载的过程中会创建一些临时文件,在文件拷贝或下载完成时再把名字改正过来,比如迅雷就是这样.我把FileSystemWatcher的Renamed事件添加了上去,果然正常了.接着又发现注册表的抓取也不正确,很多重要信息也没有抓到.因为我在调用RegMon的时候仅仅设置了一个待监视的进程.而MP3Splitter在安装完成的末期会创建一个.temp的进程,大概是专门用来处理注册表操作的.唉,看到任务管理器里的那个.tmp的时候我真不敢相信自己的眼睛.看来我只能通过排除的办法了.
由于安装脚本那一块还没有发现什么问题,于是我开始写上传那一块了.开始时我们是打算把安装包从WINDOWS传到linux服务器上,于是我用SFTP在C#程序里加了一个上传的功能.后来考虑到linux向windows主动传文件比较麻烦(用Samba可以实现linux跟windows的文件互访,但是达不到我的要求,因为我要linux主动把文件送到windows里且自动执行,而目标widnows主机可能是刚安装过的,上面没有任何附加软件).后来觉得把windows下的安装包专门放到一个windows主机上或许更简单一些.省得在linux上绕一道弯.而linux服务器仅仅需要在数据库里添加一条记录即可.于是便这样写了.在linux服务器里新建了一个WINDOWS虚拟机,装上servU,用于存放windows下的软件安装包,另外通过ipc$来实现在其他WINDOW目标机上的软件部署.C#里面实现FTP上传很简单,但后来的一个问题困惑了我很久.那台linux服务器上一共安装了两个WINDOWS虚拟机,一个就是那个代理机器(充当FTP服务器并执行远程部署),另一个为目标机,就是要部署软件的机器.两台机子的IP,网关,DNS都设置正确,都能Ping 真实机器.但是不能互相PING,并且真实机器也无法PING通他们.我们为这个忙碌了很久,九点多的时候学长才找到了原因,原来是802.x设置的问题.而我自己的机子上的那个WINDOWS虚拟机把防火墙关闭后,也可以PING通了.最后解决的一个问题是IPC连接的问题.在网上搜到了原因,原来是没有把简单文件夹的共享给去掉.
下午还碰到了线程的问题,也是我程序里的一个BUG,应该把thread声明了类的一个成员的,结果我放到了函数里,导致函数执行完毕后thread无效.但我不理解的是为什么很多时候它也能正常工作.中间某段时间我的zip压缩功能出现了差错,调试了很长时间,也没有找出原因.后来不知道怎么就好了.刚好那里我也在调那个线程的问题,所以我还不敢确定到底是什么原因.
本来还要写一个PHP的网页的,没动工.我现在几乎完全不会用PHP了.大三实习时写过一个,也只是简单用过一下.到现在也不过一年嘛,忘得一干二净了.不过看起来还不是很吃力.
明天还要集中测试一下.这个日子呀.