2012-04-24 1 views
0

.NETで偽装するときにアプリケーションの名前を取得するにはどうすればよいですか。私はVB.NETやC#のような.NET言語を好みません。私は基本的に(ここで言い訳VB.NET)を行っています:.NETで偽装するときにアプリケーションの名前を取得するには

theImpersonator = New Impersonator("username", "domain", "password") 
Dim finfo As New FileInfo(Process.GetCurrentProcess().MainModule.FileName) 
Dim appname As String = finfo.Name.Substring(0, finfo.Name.IndexOf(".")) 

"新モノマネ(...)" すべてがうまくているを使用しません。私が使用している場合、「モノマネは」私が手:私は偽装を使用していたときに

Access is denied 
    at System.Diagnostics.ProcessManager.OpenProcess(Int32 processId, Int32 access, Boolean throwIfExited) 
    at System.Diagnostics.NtProcessManager.GetModuleInfos(Int32 processId, Boolean firstModuleOnly) 
    at System.Diagnostics.NtProcessManager.GetFirstModuleInfo(Int32 processId) 
    at System.Diagnostics.Process.get_MainModule() 

は、どのように私は自分のアプリケーションの.exeファイルの名前を見つけるのですか?

答えて

1

あなたが偽装している人のように、実行中のファイルにアクセスできないようです。偽装されたユーザーが使用できないフォルダ内にないことを確認します。たとえば、サーバー上で実行している通常のユーザーはアクセス権がありません。ユーザーをコンピュータのローカル管理者として設定するか、フォルダにアクセスできるようにしてください。

簡単な方法は、ちょうどに次のようになります。

Process.GetCurrentProcess().ProcessName 

私はそれが遅いと権利を必要とする、あなたはFileInfoを使用する必要があるとは思いません。 代わりにSystem.IO.Path静的クラスを使用することができます

+0

hmm、興味深い考えです。彼はおそらくない - 彼はexeが現在実行されているいくつかの他の方法を見つけることができますか? – Denis

+0

@Denis私の編集を参照してください –

+0

完璧!ちょうど私が探していたもの! – Denis

1

私は偽装について何も知らないが、これはほとんどのアプリケーション(WPFアプリケーション)でも機能します。

string name = Path.GetFileNameWithoutExtension(
        System.Windows.Forms.Application.ExecutablePath); 
+0

興味深いアイデアですが、@Oskarが指摘したように、偽装者がファイルへのアクセス権を持たないため、同じアクセス権が拒否されると思います。提案していただきありがとうございます。 Denis

+0

@Denisこれは、このエラーが発生するとは思わない。 'Path.GetFileNameWithoutExtension'も' System.Windows.Forms.Application.ExecutablePath'もそのディレクトリへのアクセス権を必要としません –

関連する問題