Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
?
Solved

vb.net and permission issues

Posted on 2014-11-25
16
Medium Priority
?
121 Views
Last Modified: 2014-12-01
I wrote a small program and it takes an access database stored as a resource in my.resources.  On load im telling it to take that db and put it on the local workstation with the below code:

Dim tempFilePath As String = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "BMWMaintenance")
        My.Computer.FileSystem.WriteAllBytes(tempFilePath, My.Resources.BMWMaintenance, False)

Open in new window


IM not sure why but i keep erroring out with a permissions error telling me i dont have rights.  I tried launching as an admin and i still get the same result.  I am an admin of my machine and a domain admin so this should work.  What could be wrong?
0
Comment
Question by:derek7467
  • 9
  • 7
16 Comments
 

Author Comment

by:derek7467
ID: 40464574
To make this more complicated the below code works fine with UAC rights

Dim tempFilePath As String = Combine("C:\Program Files (x86)\BMW Maintenance", "BMWMaintenance.accdb")
        My.Computer.FileSystem.WriteAllBytes(tempFilePath, My.Resources.BMWMaintenance, False)

Open in new window

0
 
LVL 35

Expert Comment

by:it_saige
ID: 40464659
Try using CommonApplicationData.

The directory that serves as a common repository for application-specific data that is used by all users.
Source
Dim tempFilePath As String = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "BMWMaintenance")
        My.Computer.FileSystem.WriteAllBytes(tempFilePath, My.Resources.BMWMaintenance, False)

Open in new window


Also what is the error you are receiving?

-saige-
0
 

Author Comment

by:derek7467
ID: 40464732
error is:

An unhandled exception of type 'System.UnauthorizedAccessException' occurred in mscorlib.dll
Additional information: Access to the path 'C:\ProgramData\BMWMaintenance' is denied

This is with UAC rights built in through app manifest.

Weird thing is i can create the folder fine, its when it tries to copy the db over i get the error
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:derek7467
ID: 40464947
Is there any other way to copy an access db file to another directory?  Right now, im embedding it in my exe and distrbuting it from my.resources
0
 
LVL 35

Expert Comment

by:it_saige
ID: 40465023
I'm trying to see if I can replicate your problem.

-saige-
0
 

Author Comment

by:derek7467
ID: 40474418
any ideas why the below line always gives me a permissions error?

My.Computer.FileSystem.WriteAllBytes(tempFilePath, My.Resources.BMWMaintenance, False)

Open in new window

0
 
LVL 35

Expert Comment

by:it_saige
ID: 40474455
Personally, I have not been able to replicate this issue.  This is what I am doing:
Imports System.IO
Public Class Form1
	Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
		Dim database As New FileInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Testing.sdf"))
		If Not database.Exists Then
			database.Create()
			My.Computer.FileSystem.WriteAllBytes(database.FullName, My.Resources.Testing, False)
		End If
	End Sub
End Class

Open in new window


Not that this will make any difference because it does nothing for the security.

However, maybe an application manifest will help:

http://msdn.microsoft.com/en-us/library/bb756929.aspx

-saige-
0
 

Author Comment

by:derek7467
ID: 40474521
does that work for you?
0
 
LVL 35

Expert Comment

by:it_saige
ID: 40474535
The code, as posted, works for me without any issues.  I do not have to create an application manifest.  However, if you are still presented with a problem, then you might try the application manifest route.

-saige-
0
 

Author Comment

by:derek7467
ID: 40474562
it looks like yours is just creating a file, i am trying to copy over an access database that i embedded in my visual studio resources
0
 
LVL 35

Expert Comment

by:it_saige
ID: 40474566
I only create the file if it does not exist:
If Not database.Exists Then
	database.Create()

Open in new window

then I write the embedded resource to the file I created:
	My.Computer.FileSystem.WriteAllBytes(database.FullName, My.Resources.Testing, False)

Open in new window

But as I stated, doing this does not resolve issues with access rights.  It's only another method of doing the same thing you are.

-saige-
0
 

Author Comment

by:derek7467
ID: 40474574
Well doing it your way actually works without errors, but the file is 0 bytes, meaning nothing was written to it.  How should i store my access db in the resource section?  What should the build action be set to?
0
 
LVL 35

Accepted Solution

by:
it_saige earned 2000 total points
ID: 40474625
Ok.  I did a little more testing.  The Create method actually opens a filestream.  So we have to close the filestream, then we can WriteAllBytes.
Imports System.IO
Public Class Form1
	Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
		Dim database As New FileInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Testing.sdf"))
		Dim fileStream As FileStream
		Try
			If Not database.Exists Then
				fileStream = database.Create()
				fileStream.Close()
				My.Computer.FileSystem.WriteAllBytes(database.FullName, My.Resources.Testing, False)
			End If
		Catch ex As Exception

		End Try
	End Sub
End Class

Open in new window


As for the database resource itself.  I am simply opening the project resources designer and dragging the Database file into it directly -Capture.JPG
The database on the project is currently set with a Build Action of None and Do not copy for the Copy to Ouput Directory property -Capture.JPG
Try with your resources the way that they are first to see if it works for you.

-saige-
0
 

Author Comment

by:derek7467
ID: 40474745
that worked you da man!
0
 

Author Comment

by:derek7467
ID: 40474769
real quick if youre still here, how do i specify a folder within the localapp directory?

Dim database As New FileInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "BMWMaintenance.accdb"))

Id like to store that DB in a specific folder, say "Maintenance"
0
 
LVL 35

Expert Comment

by:it_saige
ID: 40474818
You could do something like this:
Imports System.IO

Public Class Form1
	Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
		Dim location As New DirectoryInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Maintenance"))
		Dim database As New FileInfo(Path.Combine(location.FullName, "Testing.sdf"))
		Dim fileStream As FileStream
		Try
			If Not location.Exists Then location.Create()
			If Not database.Exists Then
				fileStream = database.Create()
				fileStream.Close()
			End If
			My.Computer.FileSystem.WriteAllBytes(database.FullName, My.Resources.Testing, False)
		Catch ex As Exception

		End Try
	End Sub
End Class

Open in new window


-saige-
0

Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

More often than not, we developers are confronted with a need: a need to make some kind of magic happen via code. Whether it is for a client, for the boss, or for our own personal projects, the need must be satisfied. Most of the time, the Framework…
Simulator games are perfect for generating sample realistic data streams, especially for learning data analysis. It is even useful for demoing offerings such as Azure stream analytics, PowerBI etc.
Is your OST file inaccessible, Need to transfer OST file from one computer to another? Want to convert OST file to PST? If the answer to any of the above question is yes, then look no further. With the help of Stellar OST to PST Converter, you can e…
The Relationships Diagram is a good way to get an overall view of what a database is keeping track of. It is also where relationships are defined. A relationship specifies how two tables connect to each other. As you build tables in Microsoft Ac…
Suggested Courses
Course of the Month12 days, 10 hours left to enroll

578 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question