我在写一个安装程序,其中有一步是在C:\Program Files下创建安装目录QMS,但是提示对C:\Program Files\QMS的访问被拒绝。我用的是C#,也知道这是关于权限的一个问题,如果我用右击生成的安装程序,选择以管理员权限运行,这一步没问题,但是工直接双击生成的安装程序,这一步就会报错。我想知道的是怎么在程序中去自动申请权限,而必免直接报错。

解决方案 »

  1.   

    一楼加manifest是一个方法,我试过可以,不过,我想在程序中来处理,不知道有没有相关的资料或方法?
      

  2.   

    操作系统权限的问题,右键属性-安全-编辑,这时就可以添加用户和权限了,最简单的方法是添加EveryOne用户,权限设置为“完全控制”,但是这样会有安全风险,你可以根据你的需要来设置权限
      

  3.   

    http://www.cnblogs.com/rootkits/articles/1881101.html
    http://topic.csdn.net/u/20070730/21/38cc1c8b-3941-4aba-a65a-e20dfe47ebfd.html
    http://www.cnblogs.com/luluping/archive/2010/08/27/1809889.html
    http://hi.baidu.com/snyl/blog/item/d63780448286114e510ffee1.html
    参考不知道能不能帮上忙
      

  4.   


                DirectoryInfo info = new DirectoryInfo(@"C:\Program Files");            if (!info.Exists)
                {
                    try
                    {
                        // 对路径的访问被拒绝
                        info.Create();
                        info.Delete();                }                catch (Exception e)
                    {
                        string msg = e.Message;
                    }
                }补充一下,看了上面各位达人的解答,可以是问题还没有解决,我的情况如上面的代码中描述的,在info.Create时访问被拒绝,但是如果以管理员启动应用程序就不会出现,我想找到用代码去解决这个问题,比如代码实现提示用户提升权限,就像右击以管理员启动时的提示一样,望解答?
      

  5.   


                DirectoryInfo info = new DirectoryInfo(@"C:\Program Files\QMS");            if (!info.Exists)
                {
                    try
                    {
                        // 对路径的访问被拒绝
                        info.Create();
                        info.Delete();                }                catch (Exception e)
                    {
                        string msg = e.Message;
                    }
                }上面丢了几个字符。
    补充一下,看了上面各位达人的解答,可是问题还没有解决,我的情况如上面的代码中描述的,在info.Create时访问被拒绝,但是如果以管理员启动应用程序就不会出现,我想找到用代码去解决这个问题,比如代码实现提示用户提升权限,就像右击以管理员启动时的提示一样,望解答?
      

  6.   

    http://msdn.microsoft.com/zh-cn/library/z17ceyya(VS.90).aspx看这里
      

  7.   

    谢谢9楼,不过,恕我愚钝。
    我想在程序中实现在要求提升权限进行操作时,系统会提示用户提升权限。如果用manifest清单,则会在一打开程序时就会提示提升权限。
      

  8.   

    不要想在程序中处理了,你办不到的,实际的情况是程序没办法预料的到的,比如操作系统不同,处理方式不同,同时windows系统,winxp和win7的处理权限管理也不同,更别说不同的操作系统了,而且还可能有杀毒软件及防火墙的控制,如果你要改这些系统信息,改注册表,防火墙会阻止,你怎么处理?假如碰到不同的防火墙,你又怎么处理,换个思路,这不是程序要做的事情,懂不?程序应该关注的是完成业务逻辑,像这种情况就要靠实施人员去做了,像大型的erp项目,实施也占很大的工作量的,很大配置是不能通过程序去自动实现的。你要去给软件创造环境,去让它运行,而不是软件让软件自己去创造环境,何况很很多情况下这都是软件不能完成的任务。
      

  9.   

    AdjustTokenPrivileges
    dllimport下,这种只能用API来实现了