webForumDet fria alternativet

C# program på CD

2 svar · 212 visningar · startad av Viktor

ViktorMedlem sedan aug. 20021 752 inlägg
#1

Har gjort ett program som fungerar perfekt när jag kör det, men när jag trode att allt var klart och tillvärkade en DVD med programmet (samma layout som på den lokala disken) så fungerar det inte. När jag startar programmet från DVD'n så får jag detta fel medelande

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

************** Exception Text **************
System.UnauthorizedAccessException: Access to the path "J:\mainarchive.xml" is denied.
   at System.IO.__Error.WinIOError(Int32 errorCode, String str)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize,
 Boolean useAsync, String msgPath, Boolean bFromProxy)
   at System.IO.FileStream..ctor(String path, FileMode mode)
   at AtlasF1_ImageViewer.frmMain.LoadArchiveList(String file)
   at AtlasF1_ImageViewer.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.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Koden som hinner köras är denna

private void frmMain_Load(object sender, System.EventArgs e)
{
	if(File.Exists(Application.StartupPath+"\\mainarchive.xml"))
		LoadArchiveList(Application.StartupPath+"\\mainarchive.xml");
	else
	{
		activeSubArchives=new Hashtable();
		activeMainArchives=new Hashtable();
	}
}

private void LoadArchiveList(string file)
{
	activeMainArchives=new Hashtable();
[B]	XmlTextReader xtr=new XmlTextReader(new FileStream(file,FileMode.Open));[/B]
	XPathDocument xpdoc=new XPathDocument(xtr);
	XPathNavigator nav=xpdoc.CreateNavigator();

	XPathNodeIterator iter=nav.Select("//mainarchive/item");
	while(iter.MoveNext())
	{
		XPathNavigator navClone=iter.Current.Clone();
		navClone.MoveToFirstAttribute();
				
		string name=navClone.Value;
		navClone.MoveToNextAttribute();
		string subFile=navClone.Value;
		if(!Path.IsPathRooted(subFile))
			subFile=Path.Combine(Path.GetDirectoryName(file),subFile);
		activeMainArchives.Add(name,subFile);
		cboMainArchive.Items.Add(name);
	}
	xtr.Close();
}

Filen "J:\mainarchive.xml" finns och J: är min DVD enhet så det verkar fungera som det ska men ändå inte :x

/Viktor

renholmMedlem sedan apr. 20012 266 inlägg
#2

En gissning är att det är något problem Code Access Security men vet inte vad det skulle kunna vara exakt :)

ViktorMedlem sedan aug. 20021 752 inlägg
#3

Har hittat problemet nu.

new FileStream(file,FileMode.Open));

När man inte skickar med någon FileAccess parameter så verkar det som att default är ReadWrite och därför fungerar det inte bra när filerna är skrivskyddade. Om man skriver om det till

XmlTextReader xtr=new XmlTextReader(new FileStream(file,FileMode.Open,FileAccess.Read));

så fungerar det fint.
Något att tänka på om man planerar att slänga ner programmet på en skiva.

/Viktor

140 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)