0

我有一个网站,用户可以在其中模拟/验证自己到远程服务器,并控制特定的 Windows 服务。如果我在本地运行项目,它工作正常,但是当我将项目发布到运行IIS 服务器的Web服务器上时,它给出了一个异常:

无法在计算机(计算机名称)上打开服务控制管理器。此操作可能需要其他权限。

我的工作:

  1. 一个模拟的类(在本地运行良好):

    public class ImpersonationUtil
    {
        public static bool Impersonate()
        {
            string logon = "ADMIN";
            string password = "PASS";
            string domain = "THEDOMAIN";
            IntPtr token = IntPtr.Zero;
            IntPtr tokenDuplicate = IntPtr.Zero;
            WindowsImpersonationContext impersonationContext = null;
    
            if (LogonUser(logon, domain, password, 2, 0, ref token) != 0)
                if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)
                    impersonationContext = new WindowsIdentity(tokenDuplicate).Impersonate();
    
            return (impersonationContext != null);
        }
    
        [DllImport("advapi32.dll", CharSet = CharSet.Auto)]
        public static extern int LogonUser(string lpszUserName, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
    
        [DllImport("advapi32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto, SetLastError = true)]
        public extern static int DuplicateToken(IntPtr hToken, int impersonationLevel, ref IntPtr hNewToken);
    }
    
  2. 连接服务的代码:

        ServiceController controller = new ServiceController("serviceName", "machineAddress");
        var status = controller.Status;
    
  3. Web.config 的东西(阅读和接受网络服务器上的模拟):

    <system.webServer> <validation validateIntegratedModeConfiguration="false"/> </system.webServer>

有什么帮助吗?

4

1 回答 1

0

改变

if (LogonUser(logon, domain, password, 2, 0, ref token) != 0)

if (LogonUser(logon, domain, password, 9, 0, ref token) != 0)

未经测试,但我认为它现在应该连接。

于 2014-10-14T11:21:12.797 回答