文档章节

C#打包程序在WIn8.1系统运行失败

GoodWin
 GoodWin
发布于 2015/04/30 16:22
字数 450
阅读 44
收藏 0

之前在打包项目时发现,若程序安装在Win8.1系统中的"C:\Program Files(X86)\"路径中并且程序有用到xml文档时,程序无法对安装路径中的xml文档进行修改操作.
程序试图修改文档时报异常如下: (其中"123.xml"是程序保存的设置信息.)

异常类型: UnauthorizedAccessException
异常消息: 对路径“C:\Program Files (x86)\无线测试系统\123.xml”的访问被拒绝。


解决问题:
1)发现此问题时,我曾尝试改C盘的权限,一直更改失败;况且即使能改,也会让用户觉得麻烦,降低了体验度.


2)之后在网上搜索,发现可以修改项目"应用程序清单文件"中的<requestedExecutionLevel level>为"requireAdministrator",直接修改程序的运行权限为"管理员".我修改之后,发现可以修改配置软件.只是每次运行程序,都会跳出询问界面,使用起来也不方便.但是也没找到更好的办法,只能作罢.


3)最近偶然发现一进口软件在Win8.1系统上运行时,安装在“C:\Program Files (x86)\"路径下也完全可以修改他的某一个xml文档.研究了一会儿,发现这个xml文档的权限是针对"Everyone"的,恍然大悟.自己也可以在安装完成时修改对应的文档的权限的.随后在安装完成时增加代码如下,惊喜的发现问题解决,高兴......
   
        public Installer()
        {
            InitializeComponent();
            this.AfterInstall += new InstallEventHandler(Installer_AfterInstall);
        }
        
        void Installer_AfterInstall(object sender, InstallEventArgs e)
        {
            string path = this.Context.Parameters["targetdir"];
            path = path.TrimEnd('\\');
            string testInfoPath=path + "\\123\\456.xml";
            if (System.IO.File.Exists(testInfoPath))
            {
                SetFileEveryone(testInfoPath);
            }
        }
        

        void SetFileEveryone(string path)
        {
            System.IO.FileInfo fileInfo = new System.IO.FileInfo(path);
            System.Security.AccessControl.FileSecurity fileSecurity = fileInfo.GetAccessControl();
            fileSecurity.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow));
            fileSecurity.AddAccessRule(new FileSystemAccessRule("System", FileSystemRights.FullControl, AccessControlType.Allow));
            fileInfo.SetAccessControl(fileSecurity);
        }

© 著作权归作者所有

GoodWin
粉丝 0
博文 7
码字总数 3274
作品 0
松江
程序员
私信 提问
通过刷bios的方式在win8.1平板上启动windows phone模拟器

最近买了个Windows8.1平板电脑,不是Surface Pro,太贵,而是国产的乐凡F2(64G、4G内存),CPU是赛扬U1037。最开始安装Visual Studio2013以及其他开发工具都很顺利。不过启动Windows Phone...

androidguy
2018/06/29
0
0
Windows多合一镜像制作相关命令及注意事项总结

前几天有网友留言询问Win7旗舰版32位+64位多合一镜像的制作方法,今天就把相关内容整理一下发出来吧。其实基于原版的多合一镜像制作过程是非常简单的,不过因为涉及到几个命令行工具的用法,...

不死鸟007
2018/05/29
0
0
【3月献礼】Win8.1(32位)(64位)简体中文专业版

32/64位的明显差距在内存,32位系统不支持4G以上内存,内存容量如果超过4G,建议安装64位Win8.1。 Win8.1系统 主要特点 =========================== Ghost Windows 8.1 专业版(32位)(64位)...

herogun
2014/03/07
0
0
.net基本概念(2)

本博客( http://blog.csdn.net/livelylittlefish)贴出作者(三二一、小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正! .net基本概念 C# C#(发音为CSharp)是一种编程语言,用于构...

晨曦之光
2012/03/09
119
0
微软 .NET Framework 4.7 独立离线安装包发布下载

在Windows10创意者更新中,微软集成了.NET Framework 4.7功能和特性,但是像Win10一周年更新、Win7、Win8.1旧系统就需要离线或在线单独进行安装.NET Framework 4.7。近期微软已经发布了独立....

局长
2017/05/04
2.1K
11

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
今天
5
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
今天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
今天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
今天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
今天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部