Wednesday, March 28, 2012

System.IO.FileNotFoundException using file.copy

I had previously posted this on the security ng, but haven't had a hit so I
was wondering if someone here would be willing to take a stab. I am trying
to copy a file to a network drive. I can do it on the web server but not
from a client. Here is the code:
Dim impersonationContext As
System.Security.Principal.WindowsImpersonationContext
Dim currentWindowsIdentity As System.Security.Principal.WindowsIdentity
currentWindowsIdentity
=CType(User.Identity,System.Security.Principal.WindowsIdentity)
impersonationContext = currentWindowsIdentity.Impersonate()
dim Temp as string="TestFile"
File.Copy("\\MyServer\Template.doc", "\\MyServer\" & Temp &".doc")
impersonationContext.Undo()
I get the error "System.IO.FileNotFoundException: Could not find file
\\Server\File..." when running it from the [authenticated] client browse
r.
I searched everywhere on the web and MSDN on this error but found nothing.
The error it occurs on the file copy statement The file.copy statement is
trying to copy a file on a different server than the web server.
Any help is appreciated.
P.S. The web server is a backup domain w2k controller also, and the asp.net
user had to be changed to IWAM_Machine.to copy to another server you need to impersonate a primary token, not an
impersonation. to quickly test this, on the actual server, run ie and test -
it should work because the principal will be a primary token, if not, turn
off anonymous.
to get around this, your code will need to logon as a domain account with
enough permission to do the copy.
-- bruce (sqlwork.com)
"Stephen Witter" <switter@.enpathmed.com> wrote in message
news:#XzRmfOREHA.2408@.tk2msftngp13.phx.gbl...
> I had previously posted this on the security ng, but haven't had a hit so
I
> was wondering if someone here would be willing to take a stab. I am
trying
> to copy a file to a network drive. I can do it on the web server but not
> from a client. Here is the code:
> Dim impersonationContext As
> System.Security.Principal.WindowsImpersonationContext
> Dim currentWindowsIdentity As
System.Security.Principal.WindowsIdentity
> currentWindowsIdentity
> =CType(User.Identity,System.Security.Principal.WindowsIdentity)
> impersonationContext = currentWindowsIdentity.Impersonate()
> dim Temp as string="TestFile"
> File.Copy("\\MyServer\Template.doc", "\\MyServer\" & Temp &".doc")
> impersonationContext.Undo()
> I get the error "System.IO.FileNotFoundException: Could not find file
> \\Server\File..." when running it from the [authenticated] client brow
ser.
> I searched everywhere on the web and MSDN on this error but found nothing.
> The error it occurs on the file copy statement The file.copy statement is
> trying to copy a file on a different server than the web server.
> Any help is appreciated.
> P.S. The web server is a backup domain w2k controller also, and the
asp.net
> user had to be changed to IWAM_Machine.
>
The funny thing is I have tried to run the process from every server, even
the one where the file resides (and where it is being copied to), and they
all give the same message, that is, that the file does not exist. The only
place it works is on the web server. Anonymous access is turn off on the web
site.
I added the following code to test it:
Dim FilePermission As New FileIOPermission(FileIOPermissionAccess.AllAccess,
" \\MyServer\MyShare\SomeDirectory\Templat
e.doc") FilePermission.Assert()
If System.IO.File.Exists(" \\MyServer\MyShare\SomeDirectory\Templat
e.doc")
then
response.write("OK User: ") response.write(User.Identity.Name)
response.end
Else
Try
FilePermission.Demand()
response.write("Exists But Access Denied , User: ")
response.write(User.Identity.Name)
Catch se As Exception
response.write("Realy doesn't exist")
End Try
End If
It always returns "Exists But Access Denied , User: DOMAIN\User"
Thanks for your reply though. I know these situations can be caused by alot
of different factors.
"bruce barker" <nospam_brubar@.safeco.com> wrote in message
news:u3sAi2OREHA.2716@.tk2msftngp13.phx.gbl...
> to copy to another server you need to impersonate a primary token, not an
> impersonation. to quickly test this, on the actual server, run ie and
test -
> it should work because the principal will be a primary token, if not, turn
> off anonymous.
> to get around this, your code will need to logon as a domain account with
> enough permission to do the copy.
> -- bruce (sqlwork.com)
> "Stephen Witter" <switter@.enpathmed.com> wrote in message
> news:#XzRmfOREHA.2408@.tk2msftngp13.phx.gbl...
so
> I
> trying
not
> System.Security.Principal.WindowsIdentity
browser.
nothing.
is
> asp.net
>

0 comments:

Post a Comment