I've packed Visma SPCS Administration 200 ver. 4.5.
It's seems that there is either a bug in ThinApp or in the software.
First of some buttonicons didn't show up in Visma when virtualized, but this was solved by ExternalDlls=comctl32.dll (the function ImageList_Render failed when virtual).
But now Im not able to create new projects. I get no errors but the app isnt able to create new apps.
The app (spcsadm.exe) does a loop and checks in in "c:\spcsfiler\" if a folder called FTG1 exists.
If it doesn't it throws up an "new project"-dialog and asks for verification of creatign the project c:\spcsfiler\FTG1.
If it on the other hand finds this directory, that is, if the project already exists it checks for FTG2 and then FTG3 and so on upp to FTG999.
Natively it works. But when i run it in thinapp it for some reason keeps incrementing its loop.
Since it doesn't play with many other runtime files (its most spcsadm.exe talking with kernel32.dll and ntdll) I dont have much to play with.
I've tried most possible flags in package.ini without result, even ExternalDlls=kernel32.dll wich obviously didn't work.
So either the developers at Visma reacts on an stupid exception from kernel32-api that they shouldn't or the VOS api for kernel32 don't answer the same way as the native.
Anyone? Any ideas greatly appricieated. Here are a small bit of log from what happens when the process looks for the foldername until it gives up and starts looking FTG2* instead. (*=begins immediatly after the last line here)
026328 0db4 0a74 spcsadm.exe :00977d1b->kernel32.dll:7c81399c GetFullPathNameA+ (LPCSTR lpFileName=*12D778h->"C:\SPCSFiler\F\F6hretag\FTG1", DWORD nBufferLength=104h, LPSTR lpBuffer=*2578ED8h->"\E8h\8FhW\02hPCSFiler\F\F6hretag\Ovnbol\PRM.DBF", *lpFilePart=*12D488h->*7C910222h->"\C2h\04h")
026330 0db4 0a74 kernel32.dll:7c813a1d->ntdll.dll :7c9131ba RtlUnicodeToMultiByteSize (PULONG =*12D2D4h->32h, PCWSTR =*150358h->L"C:\SPCSFiler\F\F6hretag\FTG1", ULONG =32h)
026331 0db4 0a74 kernel32.dll:7c813a1d<-ntdll.dll :7c9131ba RtlUnicodeToMultiByteSize ->long=0h (PULONG =*12D2D4h->19h, PCWSTR =*150358h->L"C:\SPCSFiler\F\F6hretag\FTG1", ULONG =0h)
026333 0db4 0a74 kernel32.dll:7c813a48->ntdll.dll :7c9131ba RtlUnicodeToMultiByteSize (PULONG =*12D2C8h->0h, PCWSTR =*150358h->L"C:\SPCSFiler\F\F6hretag\FTG1", ULONG =2Ah)
026334 0db4 0a74 kernel32.dll:7c813a48<-ntdll.dll :7c9131ba RtlUnicodeToMultiByteSize ->long=0h (PULONG =*12D2C8h->15h, PCWSTR =*150358h->L"C:\SPCSFiler\F\F6hretag\FTG1", ULONG =0h)
026336 0db4 0a74 kernel32.dll:7c813a88->ntdll.dll :7c912bb8 RtlUnicodeStringToAnsiString
026337 0db4 0a74 kernel32.dll:7c813a88<-ntdll.dll :7c912bb8 RtlUnicodeStringToAnsiString ->long=0h (PANSI_STRING =*12D2B4h->struct {USHORT Length=19h, USHORT MaximumLength=1Ah, PSTR Buffer=*1B9A00h->"C:\SPCSFiler\F\F6hretag\FTG1"}, PCUNICODE_STRING =*12D2ACh->struct {USHORT Length=32h, USHORT MaximumLength=34h, PWSTR Buffer=*150358h->L"C:\SPCSFiler\F\F6hretag\FTG1"}, BOOLEAN ='\01h')
026339 0000 0a74 GetFullPathNameA C:\SPCSFiler\Företag\FTG1 -> 25 (buf=C:\SPCSFiler\Företag\FTG1, file_part=FTG1)
026340 0db4 0a74 spcsadm.exe :00977d1b<-kernel32.dll:7c81399c GetFullPathNameA+ ->unsigned long=19h (LPCSTR lpFileName=*12D778h->"C:\SPCSFiler\F\F6hretag\FTG1", DWORD nBufferLength=104h, LPSTR lpBuffer=*2578ED8h->"C:\SPCSFiler\F\F6hretag\FTG1", *lpFilePart=*12D488h->*2578EEDh->"FTG1")
026342 0db4 0a74 spcsadm.exe :0097764e->kernel32.dll:7c8101b1 lstrcpynA (LPSTR lpString1=*2578FE8h->"", LPCSTR lpString2=*2578ED8h->"C:\SPCSFiler\F\F6hretag\FTG1", int iMaxLength=104h)
026343 0db4 0a74 spcsadm.exe :0097764e<-kernel32.dll:7c8101b1 lstrcpynA ->*=*2578FE8h->"C:\SPCSFiler\F\F6hretag\FTG1" (LPSTR lpString1=*2578FE8h->"C:\SPCSFiler\F\F6hretag\FTG1", LPCSTR lpString2=*2578ED8h->"C:\SPCSFiler\F\F6hretag\FTG1", int iMaxLength=EBh)
026345 0db4 0a74 spcsadm.exe :00977d5f->kernel32.dll:7c80acaf SetErrorMode (UINT uMode=1h)
026346 0db4 0a74 spcsadm.exe :00977d5f<-kernel32.dll:7c80acaf SetErrorMode ->unsigned int=8001h (UINT uMode=1h)
026348 0db4 0a74 spcsadm.exe :00977d80->kernel32.dll:7c821ba5 GetVolumeInformationA+ (LPCSTR lpRootPathName=*27B4980h->"C:\", LPSTR lpVolumeNameBuffer=*0h<null pointer> <bad ptr>, DWORD nVolumeNameSize=0h, LPDWORD lpVolumeSerialNumber=*0h<null pointer> <bad ptr>, LPDWORD lpMaximumComponentLength=*12D48Ch->7h, LPDWORD lpFileSystemFlags=*12D484h->2570000h, LPSTR lpFileSystemNameBuffer=*0h<null pointer> <bad ptr>, DWORD nFileSystemNameSize=0h)
026349 0db4 0a74 spcsadm.exe :00977d80<-kernel32.dll:7c821ba5 GetVolumeInformationA+ ->int=1h (LPCSTR lpRootPathName=*27B4980h->"C:\", LPSTR lpVolumeNameBuffer=*0h<null pointer> <bad ptr>, DWORD nVolumeNameSize=0h, LPDWORD lpVolumeSerialNumber=*0h<null pointer> <bad ptr>, LPDWORD lpMaximumComponentLength=*12D48Ch->FFh, LPDWORD lpFileSystemFlags=*12D484h->700FFh, LPSTR lpFileSystemNameBuffer=*0h<null pointer> <bad ptr>, DWORD nFileSystemNameSize=0h)
026351 0db4 0a74 spcsadm.exe :00977da1->kernel32.dll:7c80acaf SetErrorMode (UINT uMode=8001h)
026352 0db4 0a74 spcsadm.exe :00977da1<-kernel32.dll:7c80acaf SetErrorMode ->unsigned int=1h (UINT uMode=8001h)
026354 0db4 0a74 spcsadm.exe :00978777->kernel32.dll:7c813879 FindFirstFileA+ (LPCSTR lpFileName=*2578ED8h->"C:\SPCSFiler\F\F6hretag\FTG1", *lpFindFileData=*12D5FCh->struct {DWORD dwFileAttributes=1h, struct ftCreationTime=struct {DWORD dwLowDateTime=0h, DWORD dwHighDateTime=12D620h}, struct ftLastAccessTime=struct {DWORD dwLowDateTime=C4E165h, DWORD dwHighDateTime=27B3E00h}, struct ftLastWriteTime=struct {DWORD dwLowDateTime=116A414h, DWORD dwHighDateTime=1h}, DWORD nFileSizeHigh=8h, DWORD nFileSizeLow=0h, DWORD dwReserved0=12D63Ch, DWORD dwReserved1=C4E165h, char[260] cFileName=['\00h', '>', '{', '\02h', '\A4h', '\D6h', '\12h', '\00h', '\08h', '\00h', '\00h', '\00h', '\90h', '2', '\FCh', '\FEh', '\08h', '\00h', '\00h', '\00h', '\00h', '\00h', '\00h', '\00h', '\9Ch' .. @%u
026356 0000 0a74 FindFirstFileA 'C:\SPCSFiler\Företag\FTG1' -> INVALID_HANDLE_VALUE *** failed [fs entry not found %drive_C%\SPCSFiler\Företag\FTG1][fs entry not found %drive_C%\SPCSFiler\Företag\FTG1][*** parent isolated, skipping system probe]
026357 0db4 0a74 spcsadm.exe :00978777<-kernel32.dll:7c813879 *** FindFirstFileA+ ->*=*FFFFFFFFh (LPCSTR lpFileName=*2578ED8h->"C:\SPCSFiler\F\F6hretag\FTG1", *lpFindFileData=*12D5FCh->struct {DWORD dwFileAttributes=1h, struct ftCreationTime=struct {DWORD dwLowDateTime=0h, DWORD dwHighDateTime=12D620h}, struct ftLastAccessTime=struct {DWORD dwLowDateTime=C4E165h, DWORD dwHighDateTime=27B3E00h}, struct ftLastWriteTime=struct {DWORD dwLowDateTime=116A414h, DWORD dwHighDateTime=1h}, DWORD nFileSizeHigh=8h, DWORD nFileSizeLow=0h, DWORD dwReserved0=0h, DWORD dwReserved1=0h, char[260] cFileName=['\00h', '>', '{', '\02h', '\A4h', '\D6h', '\12h', '\00h', '\08h', '\00h', '\00h', '\00h', '\90h', '2', '\FCh', '\FEh', '\08h', '\00h', '\00h', '\00h', '\00h', '\00h', '\00h', '\00h', '\9Ch' .. @%u
026358 0db4 0a74 spcsadm.exe :00977d1b->kernel32.dll:7c81399c GetFullPathNameA+ (LPCSTR lpFileName=*12D778h->"C:\SPCSFiler\F\F6hretag\FTG1", DWORD nBufferLength=104h, LPSTR lpBuffer=*2578ED8h->"\E8h\8FhW\02hPCSFiler\F\F6hretag\FTG1", *lpFilePart=*12D494h->*2570000h->"\C8h")
026359 0db4 0a74 kernel32.dll:7c813a1d->ntdll.dll :7c9131ba RtlUnicodeToMultiByteSize (PULONG =*12D2E0h->32h, PCWSTR =*150358h->L"C:\SPCSFiler\F\F6hretag\FTG1", ULONG =32h)
026360 0db4 0a74 kernel32.dll:7c813a1d<-ntdll.dll :7c9131ba RtlUnicodeToMultiByteSize ->long=0h (PULONG =*12D2E0h->19h, PCWSTR =*150358h->L"C:\SPCSFiler\F\F6hretag\FTG1", ULONG =0h)
026361 0db4 0a74 kernel32.dll:7c813a48->ntdll.dll :7c9131ba RtlUnicodeToMultiByteSize (PULONG =*12D2D4h->0h, PCWSTR =*150358h->L"C:\SPCSFiler\F\F6hretag\FTG1", ULONG =2Ah)
026362 0db4 0a74 kernel32.dll:7c813a48<-ntdll.dll :7c9131ba RtlUnicodeToMultiByteSize ->long=0h (PULONG =*12D2D4h->15h, PCWSTR =*150358h->L"C:\SPCSFiler\F\F6hretag\FTG1", ULONG =0h)
026363 0db4 0a74 kernel32.dll:7c813a88->ntdll.dll :7c912bb8 RtlUnicodeStringToAnsiString
026364 0db4 0a74 kernel32.dll:7c813a88<-ntdll.dll :7c912bb8 RtlUnicodeStringToAnsiString ->long=0h (PANSI_STRING =*12D2C0h->struct {USHORT Length=19h, USHORT MaximumLength=1Ah, PSTR Buffer=*1B9A00h->"C:\SPCSFiler\F\F6hretag\FTG1"}, PCUNICODE_STRING =*12D2B8h->struct {USHORT Length=32h, USHORT MaximumLength=34h, PWSTR Buffer=*150358h->L"C:\SPCSFiler\F\F6hretag\FTG1"}, BOOLEAN ='\01h')
026365 0000 0a74 GetFullPathNameA C:\SPCSFiler\Företag\FTG1 -> 25 (buf=C:\SPCSFiler\Företag\FTG1, file_part=FTG1)
026366 0db4 0a74 spcsadm.exe :00977d1b<-kernel32.dll:7c81399c GetFullPathNameA+ ->unsigned long=19h (LPCSTR lpFileName=*12D778h->"C:\SPCSFiler\F\F6hretag\FTG1", DWORD nBufferLength=104h, LPSTR lpBuffer=*2578ED8h->"C:\SPCSFiler\F\F6hretag\FTG1", *lpFilePart=*12D494h->*2578EEDh->"FTG1")
026367 0db4 0a74 spcsadm.exe :0097764e->kernel32.dll:7c8101b1 lstrcpynA (LPSTR lpString1=*2578FE8h->"", LPCSTR lpString2=*2578ED8h->"C:\SPCSFiler\F\F6hretag\FTG1", int iMaxLength=104h)
026368 0db4 0a74 spcsadm.exe :0097764e<-kernel32.dll:7c8101b1 lstrcpynA ->*=*2578FE8h->"C:\SPCSFiler\F\F6hretag\FTG1" (LPSTR lpString1=*2578FE8h->"C:\SPCSFiler\F\F6hretag\FTG1", LPCSTR lpString2=*2578ED8h->"C:\SPCSFiler\F\F6hretag\FTG1", int iMaxLength=EBh)
026369 0db4 0a74 spcsadm.exe :00977d5f->kernel32.dll:7c80acaf SetErrorMode (UINT uMode=1h)
026370 0db4 0a74 spcsadm.exe :00977d5f<-kernel32.dll:7c80acaf SetErrorMode ->unsigned int=8001h (UINT uMode=1h)
026371 0db4 0a74 spcsadm.exe :00977d80->kernel32.dll:7c821ba5 GetVolumeInformationA+ (LPCSTR lpRootPathName=*27B4980h->"C:\", LPSTR lpVolumeNameBuffer=*0h<null pointer> <bad ptr>, DWORD nVolumeNameSize=0h, LPDWORD lpVolumeSerialNumber=*0h<null pointer> <bad ptr>, LPDWORD lpMaximumComponentLength=*12D498h->257E0E8h, LPDWORD lpFileSystemFlags=*12D490h->25707D8h, LPSTR lpFileSystemNameBuffer=*0h<null pointer> <bad ptr>, DWORD nFileSystemNameSize=0h)
026372 0db4 0a74 spcsadm.exe :00977d80<-kernel32.dll:7c821ba5 GetVolumeInformationA+ ->int=1h (LPCSTR lpRootPathName=*27B4980h->"C:\", LPSTR lpVolumeNameBuffer=*0h<null pointer> <bad ptr>, DWORD nVolumeNameSize=0h, LPDWORD lpVolumeSerialNumber=*0h<null pointer> <bad ptr>, LPDWORD lpMaximumComponentLength=*12D498h->FFh, LPDWORD lpFileSystemFlags=*12D490h->700FFh, LPSTR lpFileSystemNameBuffer=*0h<null pointer> <bad ptr>, DWORD nFileSystemNameSize=0h)
026373 0db4 0a74 spcsadm.exe :00977da1->kernel32.dll:7c80acaf SetErrorMode (UINT uMode=8001h)
026374 0db4 0a74 spcsadm.exe :00977da1<-kernel32.dll:7c80acaf SetErrorMode ->unsigned int=1h (UINT uMode=8001h)
026376 0db4 0a74 spcsadm.exe :0097884d->kernel32.dll:7c80acaf SetErrorMode (UINT uMode=1h)
026377 0db4 0a74 spcsadm.exe :0097884d<-kernel32.dll:7c80acaf SetErrorMode ->unsigned int=8001h (UINT uMode=1h)
026379 0db4 0a74 spcsadm.exe :00978864->kernel32.dll:7c821ba5 GetVolumeInformationA+ (LPCSTR lpRootPathName=*2578ED8h->"C:\SPCSFiler\F\F6hretag\FTG1\", LPSTR lpVolumeNameBuffer=*0h<null pointer> <bad ptr>, DWORD nVolumeNameSize=0h, LPDWORD lpVolumeSerialNumber=*0h<null pointer> <bad ptr>, LPDWORD lpMaximumComponentLength=*0h<null pointer> <bad ptr>, LPDWORD lpFileSystemFlags=*0h<null pointer> <bad ptr>, LPSTR lpFileSystemNameBuffer=*0h<null pointer> <bad ptr>, DWORD nFileSystemNameSize=0h)
026380 0db4 0a74 spcsadm.exe :00978864<-kernel32.dll:7c821ba5 GetVolumeInformationA+ ->int=1h (LPCSTR lpRootPathName=*2578ED8h->"C:\SPCSFiler\F\F6hretag\FTG1\", LPSTR lpVolumeNameBuffer=*0h<null pointer> <bad ptr>, DWORD nVolumeNameSize=0h, LPDWORD lpVolumeSerialNumber=*0h<null pointer> <bad ptr>, LPDWORD lpMaximumComponentLength=*0h<null pointer> <bad ptr>, LPDWORD lpFileSystemFlags=*0h<null pointer> <bad ptr>, LPSTR lpFileSystemNameBuffer=*0h<null pointer> <bad ptr>, DWORD nFileSystemNameSize=0h)
026382 0db4 0a74 spcsadm.exe :00978874->kernel32.dll:7c80acaf SetErrorMode (UINT uMode=8001h)
026383 0db4 0a74 spcsadm.exe :00978874<-kernel32.dll:7c80acaf SetErrorMode ->unsigned int=1h (UINT uMode=8001h)