Имам уебсайт, на който потребителите могат да се представят / удостоверяват на отдалечен сървър и да контролират специфични услуги за Windows. То работи добре ако управлявам проекта локално, но когато аз публикувам проекта върху Уеб сървър като IIS сървър работи, дава изключение:
Не можете да отворите диспечера за управление на услуги на компютър (име на компютъра). Тази операция може да изисква други права.
Моята работа:
Клас, който представя себе си (работи добре на местно ниво):
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); }
Код за свързване с услуги:
ServiceController controller = new ServiceController("serviceName", "machineAddress"); var status = controller.Status;
Web.config stuff (За да прочетете и приемете представянето на уеб сървър):
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
</system.webServer>
Някаква помощ?
Отговори:
0 за отговор № 1промяна
if (LogonUser(logon, domain, password, 2, 0, ref token) != 0)
да се
if (LogonUser(logon, domain, password, 9, 0, ref token) != 0)
Не е тестван, но мисля, че трябва да се свърже сега.