Hej! HttpContext.Current.Server.MapPath funkar väll bara till asp.net 2.0 . Samma sak gör Application.StartupPath OK! Lägg någonting i registret, eller skapa en config-fil. En applikation är inte knuten till webben på något sätt, hur ska din applikation veta om det är applikation 1, 2 eller 75 i iis som den ska leta access-fil i? Detta programmet är en ren windows applikation som jag beskrev i första inlägget. OCh när jag har skapat installations projektet vill jag att användaren skall kunna välja var han vill installera programmet. Därför måste jag ha någon form av mapPath eftersom databasen kommer att hamna i samma katalog som exe-filen. Application.StartupPath i så fall, men bara om databasen är readonly. En användare har normalt sett inte skrivrättigheter till program- och windowsmappen (jag har inte iaf, kör inte som admin.) Ok Oskar!HttpContext.Current.Server.MapPath Framework 2.0
jag försöker använda HttpContext.Current.Server.MapPath i framework2.0 i min windows C# applikation för att ta fram sökvägen till min access databas. Men jag får ett felmeddelande
Först koden:
<code>
string Path = HttpContext.Current.Server.MapPath("SUNE.mdb");
</code>
Meddelande:
<code>
System.NullReferenceException was unhandled
Message="Object reference not set to an instance of an object."
Source="SUNE"
StackTrace:
at SUNE.Databaselogic..ctor() in C:\Documents and Settings\Tyson_laptop\Mina dokument\Visual Studio 2005\Projects\SUNE\SUNE\Databaselogic.cs:line 92
at SUNE.frmSublist.LoadUsers() in C:\Documents and Settings\Tyson_laptop\Mina dokument\Visual Studio 2005\Projects\SUNE\SUNE\frmSublist.cs:line 23
at SUNE.frmSublist..ctor() in C:\Documents and Settings\Tyson_laptop\Mina dokument\Visual Studio 2005\Projects\SUNE\SUNE\frmSublist.cs:line 18
at SUNE.frmMain.cmdGeSubscriber_Click(Object sender, EventArgs e) in C:\Documents and Settings\Tyson_laptop\Mina dokument\Visual Studio 2005\Projects\SUNE\SUNE\frmMain.cs:line 20
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.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.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at SUNE.Program.Main() in C:\Documents and Settings\Tyson_laptop\Mina dokument\Visual Studio 2005\Projects\SUNE\SUNE\Program.cs:line 19
at System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
</code>
Kan någon ge mig ett tips om vad som är fel?
/tyronneSv: HttpContext.Current.Server.MapPath Framework 2.0
Sv:HttpContext.Current.Server.MapPath Framework 2.0
I framework 1.1 så använder jag HttpContext.Current.Server.MapPath . Jag behöver bara skapa en referens till klassen System.Data.web såfunkar det.
det går ju göra på samma sätt i 2.0 men jag får då ovanstående felmeddelande:
Application.StartupPath ger en sökväg men i tex utvecklingsläget så refererar den till
C:\Documents and Settings\Tyson_laptop\Mina dokument\Visual Studio 2005\Projects\SUNE\SUNE\bin\Debug
så jag får inte ut samma sökväg av denna.
Några andra tips?
/tyronneSv: HttpContext.Current.Server.MapPath Framework 2.0
Sv:HttpContext.Current.Server.MapPath Framework 2.0
Om jag kör application.StartupPath så i utvecklingsmiljön bir detta debugmappen i bin. Men när jag kompilerar ut detta så blir det förmodligen i Bin Mappen den visar sökvägen. Detta blir struligt eftersom var skall dagabasen då läggas för att detta skall fungera automatiskt vid en installation.
Jag kanske är ute och cycklar, men jag tror inte det
/tyronneSv: HttpContext.Current.Server.MapPath Framework 2.0
När du debuggar får du helt enkelt kopiera databasen till din debug-mapp/release-mapp.
Om du inte vill att databasen ska vara readonly så får du lägga den i applicationdata, titta på någon funktion som heter något i stil med GetSpecialFolder eller liknande i System.Enviroment-klassen för att få tag på application data dels för den aktuella användaren och dels för alla användare.Sv:HttpContext.Current.Server.MapPath Framework 2.0
Jag skall titta på det.
Tack!
/Tyronne