Thursday, May 20, 2010

ipPulse 1.70 released May 20, 2010

I bet you don't know what ipPulse is. So this release announcement may be a shock too. It's the first release in five (5) years and a fairly big one at that.

First of all, what is ipPulse? it is a program designed to cycle through a list of network connected devices and test them one at a time. It can have one or two tests per machine. The first test called the primary test can be either a Ping to see if it responds or a TCP connect to a port of your choice to see if a service is alive on the target. The second optional test can be either a TCP port test (different port) or an SNMP v1/v2c walk of the active interfaces. Failures can be logged and someone can be notified that a failure occurred. Notification can be audible or by email to a computer to a cell phone. That's it. A pretty simple, but effective program. There are programs out there that cost over 10x as much that do pretty much the same thing with more bells and whistles.

So what did we change from the last version of five years ago? For starters it was compiled by the newer Visual Studio 2008 (next time maybe VS2010). Two things were removed: 1. ping using 'raw sockets'. This was redundant because it had another Ping setting. 2. Support for pagers. I haven't seen anyone with a pager in a long time. Cell phones can be emailed from the program (ie., so unless anyone has a real heart attack over it, pager support is gone. The next thing was Windows 7 (and Vista) support. Previous versions of Windows 'looked the other way' when we wrote our log files and list of targets in the program installation directory. Windows 7 and Vista don't like that at all. So now those writable files go in the user data directory where they belong. The final change was converting from the ancient Wise installer to the latest version of Inno Setup. So now it should run fine on Windows 7, Vista, XP, 2008, 2003 and 2000. Older Windows are not supported - oh well, time to move on.

If you are interested, you can find it at

I forgot to mention that it costs $69 for an unlock code. We used to compile a separate CDROM version, but like 45's, CDROMs are vanishing, so now it's just an unlock code. If you have an older version from CDROM and you want to upgrade, contact us for the unlock code. Give us your name, email and CDKEY or invoice number and we'll give you the unlock code for 1.70.

MSVCR90.DLL problem on XP

File this under something I learned about Visual C++ programming even though I've been programming it for 15+ years.

OK, so today I'm testing ipPulse 1.70 on different operating systems, Windows 7 (32 & 64), 2008, XP etc. On one completely up to date, fully patched Windows XP system I get the fateful message "cannot find MSVCR90.DLL" blah, blah. I've seen this before. It's the sign of missing side by side DLLs from the SXS directory. But wait! I didn't compile this to use the SXS DLLs - it's all supposed to be static. What's going on?

I started by using the better version of Dependency Walker to check each exe and dll. I find that one dll has the linkage to the SXS directoried (is that a word?) MSVCR90.DLL. So I look at the release flags and for static it is what it should be: /MT. BUGGGER! So next I go to MSDN help pages and carefully review the /MT and /MD flags. I don't see anything obvious, so I remove msvcr90.lib from the linker. Bad idea. Errors galore. I put it back and go back to the docs. I see a reference to libcmt.lib in the same context as /MT. I wonder. I go and remove msvcr90.lib and put libcmt.lib in there instead. The linker loves it. I review the output dll and see the offending SXS linkage is gone. Great! After rebuilding the ipPulse fileset I see that it now runs properly on that other XP system. I never knew that about libcmt.lib and /MT symbiotic relationship. The docs are not clear. So I learned something new today.

I developed ipPulse 1.70 on MS Visual Studio C++ 2008 with static linkage for all files. The DLL in question was pure C. MSVCR90.DLL is the Visual C runtime DLL.

Don't ask me why I didn't use the 2010 compiler.