Fragensteller
Berechtigung

Frage
-
Hallo
Ich habe eine CGI in .Net erstellt und die stürzt mir bei einem Workdir() Aufruf ab. Die Fehlermeldung im Browser ist.
Unbehandelte Ausnahme: System.ArgumentException: Illegales Zeichen im Pfad.
bei System.Security.Permissions.FileIOPermission.CheckIllegalCharacters(String[] str, Boolean onlyCheckExtras)
bei System.Security.Permissions.FileIOPermission.AddPathList(FileIOPermissionAccess access, AccessControlActions control, String[] pathListOrig, Boolean checkForDuplicates, Boolean needFullPath, Boolean copyPathList)
bei System.Security.Permissions.FileIOPermission..ctor(FileIOPermissionAccess access, String path)
bei System.Reflection.RuntimeModule.get_FullyQualifiedName()
bei VulcanRTFuncs.Functions.WorkDir()
bei Logout.Exe.Functions.Start() in C:\XporterOutput\Swissbase-Logout\__Start.prg:Zeile 29.Wenn ich die EXE einfach starte (cmd) läuft sie durch und schreibt mir das Workdir() in ein Kontrollfile.
Irgendwie hat die CGI zwar das recht zu starten aber nicht das recht das Verzeichnis abzurufen und wen sie unter iis10 aufgerufen wird. Es muss irgendwo im iis eine Einstellung sein, finde aber nicht herraus was und wo.
Eine Idee ?
Gruss
Horst
Alle Antworten
-
Kann durchaus sein, dass du auf das WorkingDirektory des IIS keine Berechtigung hast.
Du must bedenken, dass das CGI im Kontext des IIS aufgerufen wird.
Wenn du die EXE so startest ist das WorkingDirectory normalerweise der Aufrufpfad der Exe.Was immer du damit machen willst, must du ggf. eine andere Lösung finden (z.B. System.IO.Path.GetTempPath-Methode).
-
Hallo bfuerchau
Da ich der 'Besitzer' des Computers bin müsste ich doch diese Berechtigung für meine CGI einstellen können. Einen Workarround habe ich schon, möchte ihn aber nicht einsetzen, da ich überzeugt bin, dass dies eine Einstellungssache am IIS ist.
Die Frage ist - Wo stellt man das ein :-)
-
Dazu müsstest du genau wissen, was denn das Workingdirectory des laufenden IIS ist und die Berechtigungen dieses Verzeichnisses prüfen.
Versuche statt der Vulcan-Funktion die native System.IO-Funktion.https://msdn.microsoft.com/de-de/library/system.io.directory.getcurrentdirectory(v=vs.110).aspx
Auch wenn dir der PC gehört, so gibt es leider genügend Einschränkungen durch Microsoft, die man da leider erst mal überwinden muss.
-
Hallo bfuerchau
Was ich brauche is der Name des Directory's in dem meine CGI ist.
Wenn ich deinen Text lese dann redest du vom "Workingdirectory des laufenden IIS".
Und da glaube ich schon das ich keine Berechtigung erhalte, da könnte es schon sein
,dass die Vulcan Function auf etwas zugreift das nicht erlaubt ist.
Gruss und Danke
Horst
-
Dann benötigst du den Ausführungspfad deiner Assembly und nicht das WorkingDirectory:
https://msdn.microsoft.com/de-de/library/system.reflection.assembly.location(v=vs.110).aspx
https://stackoverflow.com/questions/52797/how-do-i-get-the-path-of-the-assembly-the-code-is-in -
Hallo bfuerchau
Das eine alte 32er CGI super läuft und eine moderne .NET nicht ist irgendwie schon komisch. Besonderes, weil mit der Kommandozeile alles OK ist nur wen IIS in Spiel kommt gibts Ärger.
Wie auch hier
pHandle := FOpen(WorkDir ()+"CGI_Error.log", FO_READWRITE)
IF pHandle != F_ERRORDie IF Abfrage verusacht einen Absturz im IIS und wen ich das Prg einfach so starte nicht.
Hast du eine Erklährung/Ahnung woran das liegen könnte ?
Gruss
Horst
-
Was immer die WorkDir()-Funktion da treibt, probier einfach den Weg von Stackoverflow.
Mag sein, dass unter IIS die Assembly eben nicht im installierten Verzeichnis läuft sondern in einer Kopie (Sandbox-Prinzip). Also musst du ggf. den Codebase-Weg versuchen wie beschrieben da du sonst nämlich keinen gültigen Pfad erhältst.
- Bearbeitet Der Suchende Freitag, 29. September 2017 12:25
-
Ohh das hat jetzt nichts mehr mit der Workdir () Function zu tun, die habe ich abgeändert.
Jetzt macht mir fOpen sorgen. Ohne die if Abfrage läuft das Programm durch und pHandle wird auch genutzt um zu schreiben. Auch im IIS.
Aber:
IF pHandle != F_ERROR -> Das läuft ganz normal in der Kommandozeile ABER nicht über den IIS
FSeek(pHandle, 0, FS_END)
n := FWriteLine(pHandle, cText+chr(13)+chr(10))
FClose(pHandle)
endifUnd auch eine Kopie müsste nachfragen können ob das File offen ist. Es muss einen Grund geben, warum sich Kommandozeile und IIS unterschiedlich verhalten.
Ich habe noch eine zweite Maschine mit einem 7.5er IIS , mal schauen was er da macht.
Gruss Horst