Home All Groups Group Topic Archive Search About

EnvironmentPermission

Author
19 Sep 2006 5:13 PM
jdkc4d
I wrote a small program for a friend that waits x seconds before giving
control back to the system.  When I run the program locally, it works fine,
but when I try to run it off of a network drive I get the following error:

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Program Files\Windows Resource Kits\Tools>"C:\Documents and
Settings\jkelaha1
\Desktop\wait.bat"

C:\Program Files\Windows Resource Kits\Tools>\\lsib\ecs$\Software\wait.exe 10

Unhandled Exception: System.Security.SecurityException: Request for the
permissi
on of type 'System.Security.Permissions.EnvironmentPermission, mscorlib,
Version
=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
   at System.Security.CodeAccessSecurityEngine.Check(Object demand,
StackCrawlMa
rk& stackMark, Boolean isPermSet)
   at System.Security.CodeAccessPermission.Demand()
   at System.Environment.GetCommandLineArgs()
   at Wait.Wait.Main(String[] args)
The action that failed was:
Demand
The type of the first permission that failed was:
System.Security.Permissions.EnvironmentPermission
The first permission that failed was:
<IPermission class="System.Security.Permissions.EnvironmentPermission,
mscorlib,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Read="Path"/>

The demand was for:
<IPermission class="System.Security.Permissions.EnvironmentPermission,
mscorlib,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Read="Path"/>

The granted set of the failing assembly was:
<PermissionSet class="System.Security.PermissionSet"
version="1">
<IPermission class="System.Security.Permissions.EnvironmentPermission,
mscorlib,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Read="USERNAME"/>
<IPermission class="System.Security.Permissions.FileDialogPermission,
mscorlib,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Unrestricted="true"/>
<IPermission class="System.Security.Permissions.FileIOPermission, mscorlib,
Vers
ion=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Read="\\LSIB\ECS$\Software\"
PathDiscovery="\\LSIB\ECS$\Software\"/>
<IPermission
class="System.Security.Permissions.IsolatedStorageFilePermission, m
scorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Allowed="AssemblyIsolationByUser"
UserQuota="9223372036854775807"
Expiry="9223372036854775807"
Permanent="True"/>
<IPermission class="System.Security.Permissions.ReflectionPermission,
mscorlib,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Flags="ReflectionEmit"/>
<IPermission class="System.Security.Permissions.SecurityPermission,
mscorlib, Ve
rsion=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Flags="Assertion, Execution, BindingRedirects"/>
<IPermission class="System.Security.Permissions.UIPermission, mscorlib,
Version=
2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Unrestricted="true"/>
<IPermission class="System.Security.Permissions.UrlIdentityPermission,
mscorlib,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Url="file://lsib/ecs$/Software/Wait.exe"/>
<IPermission class="System.Security.Permissions.ZoneIdentityPermission,
mscorlib
, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Zone="Intranet"/>
<IPermission class="System.Net.DnsPermission, System, Version=2.0.0.0,
Culture=n
eutral, PublicKeyToken=b77a5c561934e089"
version="1"
Unrestricted="true"/>
<IPermission class="System.Drawing.Printing.PrintingPermission,
System.Drawing,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
version="1"
Level="DefaultPrinting"/>
<IPermission class="System.Security.Permissions.MediaPermission,
WindowsBase, Ve
rsion=6.0.5070.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
version="1"
Audio="SafeAudio"
Video="SafeVideo"
Image="SafeImage"/>
<IPermission class="System.Security.Permissions.WebBrowserPermission,
WindowsBas
e, Version=6.0.5070.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
version="1"
Level="Safe"/>
</PermissionSet>

The assembly or AppDomain that failed was:
Wait, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
The method that caused the failure was:
Void Main(System.String[])
The Zone of the assembly that failed was:
Intranet
The Url of the assembly that failed was:
file://lsib/ecs$/Software/Wait.exe

I assume the error is coming from the line where I am looking at the command
line arguments to determine how long to wait:

....
            string[] myArgs = Environment.GetCommandLineArgs();
....

Is there a way that I can elavate the permissions in the code so that I
don't get this error?

Author
23 Sep 2006 2:09 PM
Nicole Calinoiu
Is there some reason you can't capture the command line arguments from the
application's Main method?  If you can't, you'll have two main choices for
elevating your application's CAS permissions:

1.  Deploy as a ClickOnce application, or
2.  Modify the CAS policy on the client machine.

The ClickOnce option wouldn't be bad, but eliminating the problem by
avoiding calling the Environment.GetCommandLineArgs method in the first
place would probably be your best choice.


Show quoteHide quote
"jdkc4d" <jdk***@discussions.microsoft.com> wrote in message
news:954E230B-422F-4CD1-9160-FB3F4BC3F363@microsoft.com...
>I wrote a small program for a friend that waits x seconds before giving
> control back to the system.  When I run the program locally, it works
> fine,
> but when I try to run it off of a network drive I get the following error:
>
> Microsoft Windows XP [Version 5.1.2600]
> (C) Copyright 1985-2001 Microsoft Corp.
>
> C:\Program Files\Windows Resource Kits\Tools>"C:\Documents and
> Settings\jkelaha1
> \Desktop\wait.bat"
>
> C:\Program Files\Windows Resource Kits\Tools>\\lsib\ecs$\Software\wait.exe
> 10
>
> Unhandled Exception: System.Security.SecurityException: Request for the
> permissi
> on of type 'System.Security.Permissions.EnvironmentPermission, mscorlib,
> Version
> =2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
>   at System.Security.CodeAccessSecurityEngine.Check(Object demand,
> StackCrawlMa
> rk& stackMark, Boolean isPermSet)
>   at System.Security.CodeAccessPermission.Demand()
>   at System.Environment.GetCommandLineArgs()
>   at Wait.Wait.Main(String[] args)
> The action that failed was:
> Demand
> The type of the first permission that failed was:
> System.Security.Permissions.EnvironmentPermission
> The first permission that failed was:
> <IPermission class="System.Security.Permissions.EnvironmentPermission,
> mscorlib,
> Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
> version="1"
> Read="Path"/>
>
> The demand was for:
> <IPermission class="System.Security.Permissions.EnvironmentPermission,
> mscorlib,
> Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
> version="1"
> Read="Path"/>
>
> The granted set of the failing assembly was:
> <PermissionSet class="System.Security.PermissionSet"
> version="1">
> <IPermission class="System.Security.Permissions.EnvironmentPermission,
> mscorlib,
> Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
> version="1"
> Read="USERNAME"/>
> <IPermission class="System.Security.Permissions.FileDialogPermission,
> mscorlib,
> Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
> version="1"
> Unrestricted="true"/>
> <IPermission class="System.Security.Permissions.FileIOPermission,
> mscorlib,
> Vers
> ion=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
> version="1"
> Read="\\LSIB\ECS$\Software\"
> PathDiscovery="\\LSIB\ECS$\Software\"/>
> <IPermission
> class="System.Security.Permissions.IsolatedStorageFilePermission, m
> scorlib, Version=2.0.0.0, Culture=neutral,
> PublicKeyToken=b77a5c561934e089"
> version="1"
> Allowed="AssemblyIsolationByUser"
> UserQuota="9223372036854775807"
> Expiry="9223372036854775807"
> Permanent="True"/>
> <IPermission class="System.Security.Permissions.ReflectionPermission,
> mscorlib,
> Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
> version="1"
> Flags="ReflectionEmit"/>
> <IPermission class="System.Security.Permissions.SecurityPermission,
> mscorlib, Ve
> rsion=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
> version="1"
> Flags="Assertion, Execution, BindingRedirects"/>
> <IPermission class="System.Security.Permissions.UIPermission, mscorlib,
> Version=
> 2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
> version="1"
> Unrestricted="true"/>
> <IPermission class="System.Security.Permissions.UrlIdentityPermission,
> mscorlib,
> Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
> version="1"
> Url="file://lsib/ecs$/Software/Wait.exe"/>
> <IPermission class="System.Security.Permissions.ZoneIdentityPermission,
> mscorlib
> , Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
> version="1"
> Zone="Intranet"/>
> <IPermission class="System.Net.DnsPermission, System, Version=2.0.0.0,
> Culture=n
> eutral, PublicKeyToken=b77a5c561934e089"
> version="1"
> Unrestricted="true"/>
> <IPermission class="System.Drawing.Printing.PrintingPermission,
> System.Drawing,
> Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
> version="1"
> Level="DefaultPrinting"/>
> <IPermission class="System.Security.Permissions.MediaPermission,
> WindowsBase, Ve
> rsion=6.0.5070.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
> version="1"
> Audio="SafeAudio"
> Video="SafeVideo"
> Image="SafeImage"/>
> <IPermission class="System.Security.Permissions.WebBrowserPermission,
> WindowsBas
> e, Version=6.0.5070.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
> version="1"
> Level="Safe"/>
> </PermissionSet>
>
> The assembly or AppDomain that failed was:
> Wait, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
> The method that caused the failure was:
> Void Main(System.String[])
> The Zone of the assembly that failed was:
> Intranet
> The Url of the assembly that failed was:
> file://lsib/ecs$/Software/Wait.exe
>
> I assume the error is coming from the line where I am looking at the
> command
> line arguments to determine how long to wait:
>
> ...
>            string[] myArgs = Environment.GetCommandLineArgs();
> ...
>
> Is there a way that I can elavate the permissions in the code so that I
> don't get this error?