Avatar billede timelord Nybegynder
21. juli 2009 - 10:50 Der er 10 kommentarer og
1 løsning

Fejl ved kørsel af windows program på server

Jeg har en kunde som jeg er ved at udvikle et værktøj for.

Brugerne hus kunden logger på deres server med "fjern support" og køre alt derfra.

Jeg har lagt mit program på serveren så de alle kan få adgang til det. Der er 5 brugere og de 2 af dem kan fint køre mit program med de 3 andre kan ikke, de får følgende fejl:

"Application attempted to perform an operation not allowed by the security policy. To grant this application....."

Er der nogen her der kan lede mig hen imod hvad der kan være årsagen til at de ikke vil køre på alle.

Mit program er skrevet i DOT.NET 2.0
Avatar billede bvli Praktikant
21. juli 2009 - 11:00 #1
Kunne man forestille sig, at de to af dem der kan køre dit program er administratorer på maskinen, medens de andre 3 ikke er?

Og kunne man forestille sig at dit program evt. laver noget fil IO, eller skriver til registry eller lignende?

Kunne du evt. poste hele stacktracen på den exception du får?
Avatar billede timelord Nybegynder
21. juli 2009 - 11:18 #2
Jeg kan ikke poste stacktrace da jeg ikke er ude ved kunden i øjeblikket.

Jeg har undersøgt om de skulle være administratore og det er de ikke. Umiddelbart er alle brugere ens.

De logger jo også på den samme server og kan se de samme filer.
Avatar billede bvli Praktikant
21. juli 2009 - 11:30 #3
Ok - det er lidt svært så. Kunne du ikke få dem til at kopiere den til dig?

Kører de den 'lokalt' på serveren? Altså refererer de alle til den via et lokalt path - eller er der nogen af dem der f.eks. afvikler den fra et UNC-path?
Avatar billede timelord Nybegynder
21. juli 2009 - 11:38 #4
Programmet kører fra en lokal folder de alle har adgang til.
Avatar billede bvli Praktikant
21. juli 2009 - 12:23 #5
Ja - vi kan gætte hele dagen. Men tror ikke du kommer meget videre hvis ikke du finder ud af, hvad det er der smider den exception. Mit gæt er, at du tilgår en resource i programmet, som kræver full trust og at programmet ikke kører med full trust hos de 3 af brugerne.

Men som sagt - du må nok få fat i stack trace'n.
Avatar billede timelord Nybegynder
22. juli 2009 - 12:41 #6
Her statck'en

See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
  at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet)
  at System.Security.CodeAccessPermission.Demand()
  at System.IO.FileInfo..ctor(String fileName)
  at DanCoatNavDB.frmMain.frmMain_Load(Object sender, EventArgs e)
  at System.Windows.Forms.Form.OnLoad(EventArgs e)
  at System.Windows.Forms.Form.OnCreateControl()
  at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
  at System.Windows.Forms.Control.CreateControl()
  at System.Windows.Forms.Control.WmShowWindow(Message& m)
  at System.Windows.Forms.Control.WndProc(Message& m)
  at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
  at System.Windows.Forms.ContainerControl.WndProc(Message& m)
  at System.Windows.Forms.Form.WmShowWindow(Message& m)
  at System.Windows.Forms.Form.WndProc(Message& m)
  at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
  at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
  at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
The action that failed was:
Demand
The type of the first permission that failed was:
System.Security.Permissions.FileIOPermission
The Zone of the assembly that failed was:
Intranet


************** Loaded Assemblies **************
mscorlib
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
DanCoatNavDB
    Assembly Version: 1.0.0.0
    Win32 Version: 1.0.0.0
    CodeBase: file:///V:/DanCoat/Trisect%20Development/DanCoatNavDB.exe
----------------------------------------
System.Windows.Forms
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
MySql.Data
    Assembly Version: 5.2.1.0
    Win32 Version: 5.2.1.0
    CodeBase: file:///V:/DanCoat/Trisect%20Development/MySql.Data.DLL
----------------------------------------
System.Data
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_32/System.Data/2.0.0.0__b77a5c561934e089/System.Data.dll
----------------------------------------
System.Transactions
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_32/System.Transactions/2.0.0.0__b77a5c561934e089/System.Transactions.dll
----------------------------------------

************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.
Avatar billede bvli Praktikant
22. juli 2009 - 13:25 #7
Den af brugerne der kører programmet kører det fra et netværksdrev. Ergo smider .net frameworket programmet til at køre under en anden zone (local intranet). Du prøver at læse en fil i din form_load - og det nægtes af frameworket, fordi programmet ikke har rettighed til det.

For at fikse fejlen skal brugeren enten afvikle programmet fra et lokalt drev, eller også skal du give kode fra det network-share rettighed til at læse filer lokalt. (caspol.exe er din ven i det forehavende)
Avatar billede bvli Praktikant
22. juli 2009 - 13:28 #8
wow - der skete vist et eller andet med det indlæg ovenfor.

Der skulle stå:

Ergo smider .net frameworket en securityexception når du prøver at læse en fil i din form_load. Programmet kører under en anden zone (local intranet).

Løsningen af fejlen er som der stod.
Avatar billede timelord Nybegynder
22. juli 2009 - 17:51 #9
Jeg vil jo gerne at alle bruger kørte det samme program fra serveren da det jo gør det nemmerer når det skal opdateres.

Jeg kender INTET til caspol.exe, hvordan bruger jeg den til at fortælle at mit program(eller frameworket må læse fra en fil)??

Hvordan kan det være at nogen brugere kan og ikke andre, har det noget med deres lokale pc at gøre??
(de kører jo alle med remote desktop til serveren)

Sidebemærkning:
Hatten af for dig at du via den stack udskrift kan se at min form_load læser en fil!!!
For mig er det nærmest volapyk.

Jeg kunne godt bruge lidt informationen angående caspol.exe, men du skal nok få dine points!!
Avatar billede bvli Praktikant
23. juli 2009 - 09:16 #10
Hej igen.

Ja - det ville også være ganske smart hvis det kunne lade sig gøre på den måde, at man i selve programmet kunne angive at det måtte køre fra et networkshare.

Desværre er det jo et problem rent sikkerhedsmæssigt. Så løsningen er, at en administrator, på ALLE maskiner der skal køre programmet, konfigurerer selve maskinen sådan at enten alle programmer der kører fra den specifikke netværkslokation har (f.eks) "Full Trust", eller at alle programmer signeret med din key har "Full Trust".

Hæng mig ikke op på syntaxen, men det kunne være nogenlunde sådan her:

caspol -ag 1 -url file:///<path_til_dit_share>/* Everything -n My_Secure_Location -exclusive on

caspol er en del af .net frameworket og ligger i %windir%\Microsoft.NET\Framework\<version>\Caspol.exe

At det kun er enkelte brugere der har problemet kan have noget at gøre med den måde de tilgår programmet på. Nogle browser sig måske frem til det rent lokalt, medens andre på en eller anden måde kommer frem til det via et shared bibliotek.

Anyway - dit program har som regel adgang til at læse fra filer der ligger i samme bibliotek som programmet selv uden problemer. Ville du evt. ikke kunne løse det på den måde?

Og jeg smider et svar så :)
Avatar billede timelord Nybegynder
23. juli 2009 - 09:31 #11
Tak for svaret.

Den fil jeg læser ligger i roden og ikke i den samme folder som programmet. Det kan jeg dog ændre.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester