Solved

VC++ 6.0 App must run as Admin to access a DB in the Common Application Data area

Posted on 2011-03-02
10
441 Views
Last Modified: 2012-06-27
I have an old C++/MFC app written with VS 6. I am trying to make it compliant with Windows Vista and 7 by moving the DB directory to the Common Application Data area. But when I try to open the Access DB using DAO it reads the primary table, finds no records, and reports that no data is found. However, if I select "Run as Admin", then records are found and the app runs like normal and without any issue.

Should I be storing the database in another location? If not, why does it fail to read the table correctly?

Also, I have tried using the attached manifest, that I found online and modified slightly, but it does not seem to force the application to run as admin and so I still get the no data found message. I don't know much about manifests yet, so it could be that I didn't configure it correctly.

I would appreciate it if you could provide me with the correct location to store the DB, so multiple users on a single computer can access it and/or a method of getting this app to run as Admin.

Thanks for any help or advise you can give.


F-Apps.manifest
0
Comment
Question by:no_hop
  • 6
  • 3
10 Comments
 
LVL 11

Expert Comment

by:DeepuAbrahamK
ID: 35017730
http://msdn.microsoft.com/en-us/library/bb756929.aspx

Can you try with:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
0
 
LVL 11

Expert Comment

by:DeepuAbrahamK
ID: 35018007
Another way is to set ACL on AppData folder during the installation/before starting the application.

Regarding cacls command:
http://technet.microsoft.com/en-us/library/bb490872.aspx
http://en.wikipedia.org/wiki/Cacls
0
 

Author Comment

by:no_hop
ID: 35018323
The initial comment to try: <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
did not make any difference.

I did notice that if I copy the application to some other folder that is not under the Program Files folder, say C:\MyApp; then it seems to recognize the manifest and ask the user about allowing this app to control the system.  If I select Yes, then everything seemed to work fine.  Why is that?  Also, how do I avoid that popup everytime I start the application?

With regard to the second comment to use CACLS, the instructions seem to imply that you must specify a user name and I need it to support any user and not just the one that installs it.
0
 
LVL 11

Accepted Solution

by:
DeepuAbrahamK earned 250 total points
ID: 35019481
What about this?
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
0
 
LVL 11

Expert Comment

by:DeepuAbrahamK
ID: 35024635
0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
LVL 11

Assisted Solution

by:cup
cup earned 250 total points
ID: 35048391
You can specify the user everyone.  eg

cacls xxx.mdb /E /G everyone:C

It keeps the old permissions /E
It grants (/G) everyone change permission (C)
0
 

Author Closing Comment

by:no_hop
ID: 35051695
I could not seem to find a suitable answer, so I just upgraded the application from VS 6 to VS 2008 and used a built-in manifest that seems to work.
0
 
LVL 11

Expert Comment

by:DeepuAbrahamK
ID: 35053261
Thanks for letting me know about that. Much appreciated.
0
 
LVL 11

Expert Comment

by:DeepuAbrahamK
ID: 35053262
BTW. did you make any modifications in your manifest?
0
 

Author Comment

by:no_hop
ID: 35060907
No matter what I did, the VC++ 6 compiled app would not run from the Program Files folder.  
0

Featured Post

Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Overview: This article:       (a) explains one principle method to cross-reference invoice items in Quickbooks®       (b) explores the reasons one might need to cross-reference invoice items       (c) provides a sample process for creating a M…
Describes a method of obtaining an object variable to an already running instance of Microsoft Access so that it can be controlled via automation.
The Task Scheduler is a powerful tool that is built into Windows. It allows you to schedule tasks (actions) on a recurring basis, such as hourly, daily, weekly, monthly, at log on, at startup, on idle, etc. This video Micro Tutorial is a brief intro…
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…

705 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

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now