ThinkGeo.com    |     Documentation    |     Premium Support

Thinkgeo and ngen.exe

Hi,


We have generated a .NET native image for our application with ngen.exe. One of our dll using thinkgeo crashed. It turns out that the Overlays collection of the WpfMap object is never initialized.


Is it an issue that you have already encountered ?


P.OM


Reportive 



Puthirak, 
  
 Thank you for your post, could you please upload a crash image or some crash information? 
  
 Regards, 
  
 Gary

Hi Gary,


I can give you the callstack of the crash but i don't think it's relevant. The crash occured when I tried to access the Overlays collection of the WpfMap object, because it's value is null. So the Overlays initialization failed somehow...


Regards,


P.OM



Puthirak, 
  
 Thank you for your information, if you think exception info can’t find out the problem, could you please provide a sample? 
  
 Sorry I can’t resolve a problem without recreate it. 
  
 Regards, 
  
 Gary

Gary,


It's very simple to reproduce it.


Take a project from your wiki : wiki.thinkgeo.com/wiki/File:...100816.zip

Compile the release version. Go to the release directory.

Create there, a batch file which content is like this:



set opt=install
for %%i in (*.dll;*.exe) do "c:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe" %OPT% "%%i"

Change the path of ngen.exe accordingly.

Execute the batch. Execute ZoomToFullExtentWpf.exe.

You got an exception. wpfMap1.BackgroundOverlay is null.


Regards,

P.OM

 

PS: The references to the thinkgeo DLLs should have the option "Copy Local" set to true.

 



Puthirak, 



Thank you for your further information and how to recreate the problem. 



I followed your instruction and still not recreate the problem, please see the attached video, is there something I made wrong? 



Click here to download the attached video (requires Adobe Flash Player)



Regards, 



Gary



Gary,


As in the video, the ngen.exe is applied on the directory "c:\windows\sytem32" not on the release directory of the project.


You should add this line at the beginning of the batch: pushd %~dp0

And this one at the end: popd


So you'll have in the batch:



pushd %~dp0
set opt=install
for %%i in (*.dll;*.exe) do "c:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe" %OPT% "%%i"
popd



Regards,

P.OM

 


PS: I hope your system hasn't become unstable because of this batch. Maybe you should restore your system from a previous restoration point.



Puthirak, 



Thank you for your further information and warning. 



I tried again with the new batch file, but still couldn't recreate the problem, please see the video below and help me to reproduce your problem.


screencast.com/t/xFqC7vHKYX9m



Regards, 



Gary



Gary,


I've downloaded the latest version (build 5.0.108.0) and tried again.

And reproduced the crash. I've made a Jing video to show you the crash.


screencast.com/t/VLrdy2sD1


Maybe, you should check if the dlls are not install in the GAC ?


Regards,

P.OM

 



Puthirak, 
  
 Thank you for your video, so I changed my dlls to 5.0.108.0 and retried it, it still working fine. 
  
 And this time, I paused the batchfile at the end, and compare with yours in the video, I’m sure it’s the same and the dlls are installed into GAC, I tried in two different computer with two different dlls type. Full and Evaluation, I can’t get the result as yours. 
  
 Could you please try it in another machine? 
  
 Regards, 
  
 Gary

Gary,


My colleagues have the same problem. One have Vista 32bits, the other have W7 64bits. And I have XP.


But is your machine a 64 bits ?

If so, you should use the 64bits version of ngen. You should normally find it in :


c:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe


Regards,

P.OM

 



Puthirak,  
  
 Thank you for the information about 64bits, I have tried in that way, but sadly, it still working fine, I don’t know what’s the problem. 
  
 Could you please provide a sample code that after you used the ngen and can’t work, I can run it in my computer and find out what’s the result. 
  
 Regards, 
  
 Gary

Gary,


I've created a 7z file with the executable and the dlls.

You can download it by using this link:


dl.free.fr/hjX6mcBFA


Regards,

P.OM

 


PS: Here's the full project. It's compiled for a 32bits machine.


dl.free.fr/m46rnE2GV



Puthirak, 
  
 Thank you for your sample, that really helped, with the dlls in it, I can recreate it, I’m working on that to compare the difference between dlls, and will let you know the result as soon as possbile. 
  
 Regards, 
  
 Gary

Hi. Any news, Gary ?



Puthirak, 
  
 Sorry I’m still working on this, now the problem is when I use the dlls which got obfuscated, it will crash, even I decrease some obfuscate strategy.  
  
 I will let you know as soon as I get the right result. 
  
 Regards, 
  
 Gary