Avatar billede rumbassen Nybegynder
03. september 2003 - 08:38 Der er 7 kommentarer og
1 løsning

Gemme filer til netværks drev i DotNet

Hej Alle
Jeg er ved at lave en webapplication i c# hvor jeg skal kunne gemme filer til et netværksdrev.
Jeg kan godt gemme localt på c:\ på serveren hvor min web application ligger men kan ikke finde ud af hvordan jeg får rettigheder til at gemme ud på netværket.
således skriver jeg nu til serveren:
private void Page_Load(object sender, System.EventArgs e)
{
string texttoadd = "Haløjsa";
CreateTextFile("c:\\test.txt", texttoadd);
}
public void CreateTextFile(string filename, string textToAdd) 
{             
FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.None);
   
StreamWriter swFromFileStream = new StreamWriter(fs);
swFromFileStream.Write(textToAdd);
swFromFileStream.Flush();
swFromFileStream.Close();
}

og jeg har sat <identity impersonate="true"/> inde i web.config
Jeg har også prøvet at mappe et drev og skrive til det med

Process proc = ProcessStartInfo startInfo = null;
Process batchProcess = null;
bool finished = false;

startInfo = new ProcessStartInfo();
startInfo.FileName = "net use x: \\\\server\\mappe password /user:domain\bruger";
startInfo.UseShellExecute=false;
Process.Start(startInfo);

og med dette får jeg lov til at mappe et netværksdrev på serveren, men det er kun systemprocesser man får lov til at køre der, så jeg kan ikke kopiere den lokale fil over på netværksdrevet bag efter.

Er der nogen som kan hjælpe mig med dette problem??
Avatar billede nielslbeck Nybegynder
03. september 2003 - 08:42 #1
Det er ASP.NET brugeren der skal have adgang til de steder på disken hvor du vil skrive. Det bliver derfor nok lidt svært at mappe et drev runtime og derefter give ASP.NET brugeren adgang til det... jeg ved i hvert fald ikke hvad der skal stå som kodeord så :-(
Avatar billede rumbassen Nybegynder
03. september 2003 - 08:56 #2
Jeg kan ikke få lov til at rette på rettigheder til denne asp bruger, da der kører mange andre webapplicationer på denne server, som skal bruge de indstillinger der nu engang er.
Jeg har set lidt på at man kan bruge nogle dll filer til at få adgang til det, ved at give en bruger adgang til det.
og jeg har kigget på sølgende link, hvor der er en som opretter en mappe på et netværks drev. Og den kode burte jeg kunne bruge, men jeg kan ikke lige gennemskue hvad han laver og så er det vist også til en windows application.
Det står under Accepted Answer:
http://www.experts-exchange.com/Programming/Programming_Languages/Dot_Net/Q_20611565.html
Kan i se en sammenhæng i dette?
Avatar billede nielslbeck Nybegynder
03. september 2003 - 09:06 #3
Det "naveenkohli" gør er, at han benytter sin metode ImpersonateUser til at logge ind som en bruger på domænet, som har rettigheder til folderen. Det kræver, at han benytter nogle kald til Windows-dll'er, hvilket han klarer med SecuUtil32-klassen. ImpersonateUser-metoden skal så kaldes med domænenavn, brugernavn på domænet samt brugerens kodeord. Derefter kan folderen oprettes. Og nej, det er ikke en Windows-form, men en ASP.NET-side.

Tror bare du skal kopiere

class SecuUtil32
{
    [DllImport("advapi32.dll", SetLastError=true)]
    public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);

    [DllImport("kernel32.dll", CharSet=CharSet.Auto)]
    public extern static bool CloseHandle(IntPtr handle);

    [DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]
    public extern static bool DuplicateToken(IntPtr ExistingTokenHandle,
          int SECURITY_IMPERSONATION_LEVEL, ref IntPtr DuplicateTokenHandle);
}

ind i dit program, sammen med ImpersonateUser-metoden, og så bare benytte den til at logge ind med. Hvis du ikke har mulighed for at logge ind med en domænebruger som har adgang til stien, bliver det ret svært at lave...
Avatar billede rumbassen Nybegynder
03. september 2003 - 10:31 #4
Jeg kan stadig ikke få det til at virke, kan du evt give et kode eksembel?
Avatar billede nielslbeck Nybegynder
03. september 2003 - 12:22 #5
Jeg sidder desvaerre lige ved en Linux maskine :-( Saa jeg har lidt svaert ved at give saa mange eksempler i oejeblikket - i hvert fald hvis jeg skal vaere sikker paa, at eksemplet virker.

Men har du proevet at goere som jeg har beskrevet? Hvis du har, er det saa compiler eller runtime-fejl du faar?
Avatar billede nielslbeck Nybegynder
03. september 2003 - 12:26 #6
Hvad sker der hvis du forsoeger med det svar som "naveenkohli" gav, hvor du har aendret \\scratchy\ReportingData til den folder hvori du vil oprette den nye folder, samt this.ImpersonateUser("DOTNET", "naveen", "naveen") til at vaere et kald som giver domaenenavn, brugernavn samt kodeord med for en bruger, som findes paa domaenet?
Avatar billede rumbassen Nybegynder
03. september 2003 - 12:58 #7
Ja det har jeg prøvet, det melder ingen fejl, men der kommer heller ikke nogen mappe. jeg har prøvet at ændre til den dotnet bruger som er på serveren og "naveen" har jeg ændret til en normal user og der til hørende password. Og brugeren er oprettet på domainet.
Avatar billede nielslbeck Nybegynder
03. september 2003 - 16:18 #8
Okay, lyder mystisk... skal nok lige kigge på det engang... har desværre ikke tid i dag :-(
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