我做的自动安装程序,需要在注册表中记录类库信息,这就需要机器管理员权限,但用户的登陆windows的帐号都不是管理员权限的,我能否在程序中实现管理员身份来写注册表?

解决方案 »

  1.   

    我要用regasm注册一些dll,它会写道HKEY_CLASSES_ROOT下,这就要管理员权限
      

  2.   

    是不是.net开发的dll注册到用户机器上都需要管理员权限?
      

  3.   

    在不知道管理员帐号密码的情况下,想在普通帐号登陆后以管理员身份运行程序是不可能的
    也就是说,无论如何,必须知道管理员帐号密码才可以。
    那么,有两种方式,第一方式,可以在代码里通过委托/代理模式以管理员身份运行,这样的话需要在代码里写死管理理员名字和密码,但是密码经常会改变。
    第二种方式,可以右键点击你的安装程序,选择Run As,在The following user里输入管理员用户名和密码即可。如果是web方式的cab自动安装,只要Run As运行IE访问你的网站即可。
      

  4.   

    这是不可能的,很明显,你的客户可能不知道管理员的帐号。如果常规的方式开发一个.net的应用程序就可以绕开Windows的权限验证。。那这个世界就不需要警察了。写死代码也是不可能的,不可能你的用户都用相同的管理员帐号吧。如果真是这样。那到为你留了一条很好的后门:)最好的办法:告诉你的用户:切换到Windows admin 再安装。
    或则采用避免写注册表的程序行为。
      

  5.   

    怎样用程序来regasm注册.net的DLL?
    哪位大侠有这方面的经验?
      

  6.   

    我用Cmd的命令行直接注册.net的dll是正常的
    但是我直接在程序里启动一个Process来注册就怎么都注册不上去,代码如下:
                      XmlNode mainDllnode = node.SelectSingleNode("MainDLL");
    string comandStr = "";
    comandStr += baseFunctionDir+"FUNCTION\\";
    comandStr += mainDllnode.InnerText;//dll名称是存在xml文件里的
    comandStr += " /codebase ";
    comandStr = comandStr.Replace("Program Files","Progra~1");
    Process p = new Process();
    p.StartInfo.UseShellExecute = false;
    //pr.StartInfo.ErrorDialog = true;
    p.StartInfo.FileName = baseFrameworkDir +"v1.1.4322\\regasm.exe";
                      p.StartInfo.Arguments=comandStr;
    p.StartInfo.RedirectStandardError = true;
    p.StartInfo.CreateNoWindow = true;
    p.Start();
    p.WaitForExit();Process 照样能运行,显示的警告和在cmd中手动的注册也是一样的
    就是注册不上,哪位大侠能否帮忙看看,谢谢拉
      

  7.   

    用户都是域帐号,不能给管理员权限,但又要能自动更新已经安装的程序
    这样,你可以采取在用户的机器上种木马的方式,即先用系统管理员登陆,强行给他装上一个服务用本地系统的用户运行(SYSTEM用户永远是Administrators的成员)。然后你的程序就可以利用这个木马做代理来完成系统管理员权限才能完成的操作。