wutangye
2017-03-13 06:57
采纳率: 100%
浏览 3.8k
已采纳

关于VS C# WinForm 下Application.StartupPath的疑惑

编写的程序在封装后,安装下测试机内,安装程序把程序安装在“C:\Program Files (x86)\公司名\软件名”下,程序启动时需要检查是否存在数据库文件“DATA.DB”,路径使用了“Application.StartupPath\data.db”来查找,如果不存在,则新建,还是用这个路径建立,但是新建“DATA.DB”时保存在了:

C:\Users\用户名\AppData\Local\VirtualStore\Program Files (x86)\公司名\软件名\data.db

测试1:把安装后的程序目录复制到桌面,目录里没有data.db,打开程序,在桌面的程序目录里自动建立data.db;
测试2:把安装后的程序目录更名为“软件名1”,启动程序,“DATA.DB”自动建立在:

C:\Users\用户名\AppData\Local\VirtualStore\Program Files (x86)\公司名\软件名1\data.db

证明:在“C:\Program Files (x86)”里的程序使用“Application.StartupPath”创建文件时都会保存在“C:\Users\用户名\AppData\Local\VirtualStore\Program Files (x86)\公司名\软件名”下。

百度:
這是虛擬轉儲,用途是如果應用程序沒有系統目錄的寫入權限,但是需要寫入文件時,系統就會把文件就會轉存到這裡,然後騙程序說存進去了,UAC就算關閉,這個功能也仍然存在(Windows目錄下的文件一律轉儲),這是爲了多用戶考慮的(任何用戶不能隨便修改系統關鍵目錄的文件).

测试3:用管理员身份启动程序,的确在“C:\Program Files (x86)\公司名\软件名”建立了数据库

疑问:测试3成功,但每次都要弹出UAC警告,由于要发送给多用户,不想说服多用户半闭UAC,怎么处理?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • Tiger_Zhao 2017-03-13 07:51
    已采纳

    你以为是 Win98/XP 时代啊,一切任性。
    那个目录是安装程序用的,数据存放目录应该在 Application.CommonAppDataPathApplication.LocalUserAppDataPathApplication.UserAppDataPath中选一个。

    点赞 评论
  • blownewbee 2017-03-13 07:52

    不要用Application.StartupPath,应该用Assembly.GetExecutingAssembly().Location

    点赞 评论

相关推荐 更多相似问题