2010-01-30 23 views
6

Come si può determinare se un particolare .Net assembly è già stato ingannato o no? Devo controllare dal codice. Anche invocare la riga di comando andrebbe bene. Al momento non riesco a vedere alcun modo per determinare questo.Come determinare se l'assemblaggio è stato annullato?

+0

Nel codice? Dalla riga di comando? Interattivo? Che cosa? Deve essere nelle proprietà del file da qualche parte ... –

risposta

3

È possibile provare a trovare il proprio assieme in "cache ngen" (C: \ Windows \ assembly \ NativeImages_v2XXXXXXX).

Gli assembly assemblati avranno il seguente formato: [nome-base]. ni. [Baseextension].

+0

Windows 7 sembra archiviarli è una posizione leggermente diversa, e senza '.ni.' nel nome: C: \ Windows \ assembly –

+0

Molto strano. Ho installato Windows 7 e il percorso "ngen cash" è "C: \ Windows \ assembly \ NativeImages_v2.0.50727_32 \". – Sasha

4

assegno da Codice

Verificare se stiamo caricando un'immagine nativa per l'assemblaggio di esecuzione. Sto cercando il modello "\ assemblyname.ni" nella proprietà del nome file del modulo caricato.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Reflection; 
using System.Diagnostics; 

namespace MyTestsApp 
{ 
    class Program 
    { 
     static bool Main(string[] args) 
     { 

      Process process = Process.GetCurrentProcess(); 

      ProcessModule[] modules = new ProcessModule[process.Modules.Count]; 
      process.Modules.CopyTo(modules,0); 

      var niQuery = from m in modules where m.FileName.Contains("\\"+process.ProcessName+".ni") select m.FileName; 
      bool ni = niQuery.Count()>0 ?true:false; 

      if (ni) 
      { 
       Console.WriteLine("Native Image: "+niQuery.ElementAt(0)); 
      } 
      else 
      { 
       Console.WriteLine("IL Image: " + process.MainModule.FileName); 
      } 

      return ni; 
     } 
    } 
} 

Command Line Soluzione:

Run "visualizzazione ngen" sul prompt dei comandi.

Esempio:

visualizzazione ngen MyTestsApp.exe

Se installato, esso stampa qualcosa come immagini native: MyTestsApp, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null

e ritorna 0 (% errorlevel%)

In caso contrario, esso stampa:

Errore: l'assembly specificato non è installato.

e restituisce -1

Problemi correlati