2010-02-18 7 views
6

mit C# WMI ich eine exe auf einem anderen Computer starten und diese exe starten eine weitere exe mit die C# Process Klasse. Die letzte exe versucht, Directory.CreateDirectory unter Verwendung eines Netzwerkpfads (alias \\\\comp1\d$\dir\) aufzurufen. Directory.CreateDirectory wirft diese Ausnahme:C# WMI läuft eine exe auf einem Remote-PC, dann läuft eine andere exe auf dem gleichen PC, die dann Directory.CreateDirectory auf einem Netzwerkpfad ruft und nicht

Access to the path '\\\\blah\blah\blah' is denied. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
    at System.IO.Directory.InternalCreateDirectory(String fullPath, String path, DirectorySecurity dirSecurity) 
    at System.IO.Directory.CreateDirectory(String path, DirectorySecurity directorySecurity) 

Wenn ich die dritte exe direkt in einer Konsole auf dem Computer läuft es auf diese Ausnahme existiert nicht geworfen und alles funktioniert.

Die Sicherheitseinstellungen für den Ordner, in dem das Verzeichnis „Jeder“ wird gegeben volle Berechtigungen erstellt hat.

Wie behebe ich dieses Problem?

+2

Haben Sie sichergestellt, dass die Sicherheitseinstellungen des freigegebenen Netzwerkordners Lese-/Schreibberechtigungen zulassen? – Aaron

+0

Soweit ich das beurteilen kann .. – jestro

+0

irgendeine Lösung darüber? – Kiquenet

Antwort

1

Als Aaron sagte, Sicherheitsfenster Aktie hat zwei Komponenten: erstens die Sicherheit der Aktie selbst ist. Die zweite ist die Sicherheit für die Dateien und Ordner in dieser Freigabe.

Beide müssen den Verzeichniszugriff erlauben, damit dies funktioniert.

Sie sollten auch wissen, dass die Gruppe jeder Domäne Computerkonten enthält, die eingebaute Systemkonto, Domain-Benutzer, Gast, und authentifizierten Benutzern.

Dies bedeutet, dass das erste, was Sie tun möchten, ist zu sehen, welche Benutzer dies tatsächlich unter ausgeführt wird. Wenn es unter dem Computerkonto ausgeführt wird UND es nicht Teil einer Domäne ist, müssen Sie diesem Computerkonto Zugriff auf das Freigabe- und Dateisystem gewähren.

2

Beachten Sie auch, dass, wenn eine App über WMI starten, gibt es eine dritte Schicht von Rechten ist. Wenn Sie beispielsweise eine Methode für ein vorhandenes WMI-Objekt aufrufen, delegiert es möglicherweise nicht die Anruferrechte oder sogar die Rechte der Host-Exe, sondern hat einen Empty Principal. Dies könnte dir passieren.

Gehen Sie zu Computerverwaltung, und unter Dienste und Anwendungen, klicken Sie rechts auf den WMI-Steuerung-Knoten und wählen Sie Eigenschaften. Wechseln Sie zur Registerkarte Sicherheit, und navigieren Sie dann zum richtigen WMI-Namespace (höchstwahrscheinlich root \ CIMV2), und vergewissern Sie sich, dass der Benutzer, den Sie verwenden, auch über die entsprechenden Rechte verfügt.

+0

Wenn ich alle zu root \ CIMV2 hinzugefügt und gab es volle Berechtigungen würde das den Trick tun? – jestro

+1

Möglicherweise. Ich bin mir nicht ganz sicher, was hier vor sich geht. Ich wollte Sie nur darauf aufmerksam machen, dass Sie, wenn Sie eine über WMI gestartete Aktion ausführen, tatsächlich über einen dritten Satz Berechtigungen verfügen. – Nick

+0

Richtig, danke für die Köpfe hoch. Es ist sicherlich eine schmerzhafte Situation. – jestro

Verwandte Themen