- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有办法在ServiceDefinition.csdef
或其他地方执行此操作,而无需转到IIS并手动调整?
我尝试了 executionContext="elevated"
for webrole,但不起作用。
更新
如果您在 Azure IIS 上安装“IIS 6 Metabase Compatibility”,下面显示的错误就会消失。
这引发了另一个问题,如何在 Azure 上的部署阶段自动安装“IIS 6 元数据库兼容性”。
<小时/>@astaykov,我喜欢评论,但下面的代码太大,所以我使用这个地方。
我使用 Wade Wagner 编写的相同代码:
public override bool OnStart()
{
// http://code.msdn.microsoft.com/windowsazure/CSAzureChangeAppPoolIdentit-27099828
// This variable is used to iterate through list of Application pools
string metabasePath = "IIS://localhost/W3SVC/AppPools";
string appPoolName;
using (ServerManager serverManager = new ServerManager())
{
//Get the name of the appPool that is created by Azure
appPoolName = serverManager.Sites[RoleEnvironment.CurrentRoleInstance.Id + "_Web"].Applications.First().ApplicationPoolName;
// Get list of appPools at specified metabasePath location
using (DirectoryEntry appPools = new DirectoryEntry(metabasePath))
{
// From the list of appPools, Search and get the appPool that is created by Azure
using (DirectoryEntry azureAppPool = appPools.Children.Find(appPoolName, "IIsApplicationPool"))
{
if (azureAppPool != null)
{
// Refer to:
// http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/e3a60d16-1f4d-44a4-9866-5aded450956f.mspx?mfr=true,
// http://learn.iis.net/page.aspx/624/application-pool-identities/
// for more info on AppPoolIdentityType
azureAppPool.InvokeSet("AppPoolIdentityType", new Object[] { 0 }); // MD_APPPOOL_IDENTITY_TYPE_LOCALSYSTEM
// Write above settings to IIS metabase
azureAppPool.Invoke("SetInfo", null);
// Commit the above configuration changes that are written to metabase
azureAppPool.CommitChanges();
}
}
}
}
RoleInRun = true;
TaskInRun = false;
return base.OnStart();
}
我可以在appPoolName
处获取正确的值,但是这里发生了错误:使用 (DirectoryEntry azureAppPool = appPools.Children.Find(appPoolName, "IIsApplicationPool"))
我正在到处寻找解决方案,但仍然找不到线索以下错误来自 IIS 事件:
Application: WaIISHost.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.Runtime.InteropServices.COMException
Stack:
at System.DirectoryServices.DirectoryEntry.Bind(Boolean)
at System.DirectoryServices.DirectoryEntry.Bind()
at System.DirectoryServices.DirectoryEntry.get_IsContainer()
at System.DirectoryServices.DirectoryEntries.Find(System.String, System.String)
at GimmeRank.Redirector.WebRole.OnStart()
at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.InitializeRoleInternal(Microsoft.WindowsAzure.ServiceRuntime.Implementation.Loader.RoleType)
at Microsoft.WindowsAzure.ServiceRuntime.Implementation.Loader.RoleRuntimeBridge.<InitializeRole>b__0()
at System.Threading.ExecutionContext.runTryCode(System.Object)
at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode, CleanupCode, System.Object)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
at System.Threading.ThreadHelper.ThreadStart()
有什么想法吗?
最佳答案
executionContext="elevated"只会将您的 RoleEntryPoint 作为本地 SYSTEM 帐户运行,但它不是 IIS 池标识。
您可能想查看this blog post by Wade Wagner 。他在那里描述的内容可以在您的 OnStart 方法中与executionContext="elevated"一起运行(因为只有管理员可以更改池身份)。如果这对本地系统不起作用,您可以为 RDP 创建一个用户,它将添加到管理员组中,并且您可以将 iis 应用程序池标识设置为该用户。
更新
嗯,我使用了以下方法(类似)并且效果很好:
private void SetAppPoolIdentity()
{
string appPoolUser = "myRDP_admin_user";
string appPoolPass = "my_super_secure_password";
Action<string> iis7fix = (appPoolName) =>
{
bool committed = false;
while (!committed)
{
try
{
using (ServerManager sm = new ServerManager())
{
var applicationPool = sm.ApplicationPools[appPoolName];
applicationPool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser;
applicationPool.ProcessModel.UserName = appPoolUser;
applicationPool.ProcessModel.Password = appPoolPass;
sm.CommitChanges();
committed = true;
}
}
catch (FileLoadException fle)
{
Trace.TraceError("Trying again because: " + fle.Message);
}
}
};
// ServerManager in %WinDir%System32InetSrvMicrosoft.Web.Administration.dll
var sitename = RoleEnvironment.CurrentRoleInstance.Id + "_Web";
var appPoolNames = new ServerManager().Sites[sitename].Applications.Select(app => app.ApplicationPoolName).ToList();
appPoolNames.ForEach(iis7fix);
}
你能尝试一下吗?请注意,它不适用于本地系统帐户,因为它不是真实帐户,我们不能这样设置(至少我不知道如何做到这一点,但对于 RDP 的特定帐户,它可以正常工作)。
关于iis - 在 Azure 中将应用程序池的标识设置为 LocalSystem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9339743/
有没有办法在ServiceDefinition.csdef或其他地方执行此操作,而无需转到IIS并手动调整? 我尝试了 executionContext="elevated" for webrole,
试图解决它,但到目前为止所有的努力都是徒劳的。工作流程如下 作为 LocalSystem 运行的 Windows 服务使用 CreateProcessAsUser(...) 创建子服务带有当前登录用户
我试图通过 NtAllocateUuids 或简单地调用 UuidCreateSequential 获取 Uuid,但 Windows 无法为我的笔记本电脑获取以太网或 token 环硬件地址。因此,
我有一个在 Windows XP 及以下系统上作为 LocalSystem 运行的进程。我正在尝试找到一种方法让它启动另一个进程来模拟另一个用户而不必提供用户密码。 原则上这应该是可能的,因为 Loc
我正在使用 Windows Server v1.0 的服务总线。我有一个在 LocalSystem (NT AUTHORITY\SYSTEM) 帐户或 NetworkService (NT AUTHO
背景 我们需要从 Windows 服务运行 GUI 应用程序,设置为“作为本地系统登录”(并且不启用与桌面交互)。 GUI 应用程序采用一个命令行参数,执行一项特定任务,然后自行终止。它是一个 GUI
我们有一个从命令行安装 SQL Server Express 的应用程序,并通过参数 SQLACCOUNT="NT AUTHORITY\SYSTEM"将服务帐户指定为 LocalSystem 帐户。
我正在尝试配置我的 PostgreSql 数据库(“mydb”)以便为 Windows“LocalSystem”帐户提供登录权限。 我在我的数据库中创建了一个名为 LocalSystem 的用户 SQ
当服务作为本地系统运行时,是否可以从作为 Windows 托管服务托管的 WCF 服务在远程服务器上生成进程? 我需要人们能够在他们自己的帐户上下文下在远程服务器上执行操作(基本上就像 PSExec
我是 Windows 服务编程的新手。在编写 Windows 服务时,我对设置帐户类型的内容感到困惑。 在编写服务时,如何选择或确定我们需要设置的账户类型? 最佳答案 我们通常创建特殊的窗口(本地用于
我在与 Windows 服务相关的问题上苦苦挣扎。 在我的项目中,我想使用 c# 代码更改 sql 服务“LOG ON AS”本地系统。 最佳答案 在 C# 中你可以这样做: var process
我正在尝试使用此代码以 LocalSystem 帐户的身份启动一个进程 ProcessStartInfo _startInfo = new ProcessStartInfo(commandNa
我正在尝试按照 Windows SDK 中的说明编写我的第一个服务应用程序。我使用以下代码安装了该服务: SC_HANDLE schs=CreateService(sch,
如何使用 Win32 API 在与 LocalSystem 帐户不同的帐户下安装服务? 我正在使用以下代码来安装该服务。我想在不同的帐户下安装此服务。最后两个参数采用用户名和密码,但是当我给出时它会抛
我正在用 C 为 Windows 编写一个类似服务器的小程序(使用 MinGW/GCC,在 Windows 7 上测试),它最终应该作为使用 LocalSystem 帐户的服务运行。我正在创建一个套接
我创建了一项服务,仅当该用户登录(信息亭用户)时,该服务才会在特定用户的桌面上显示某种启动屏幕。 一旦输入有效的代码,该启动屏幕就会将该信息告知服务,并且服务将进入休眠状态 x 时间(取决于代码)。
我正在设置 Selenium Grid。每个版本的浏览器都有一台单独的机器。 每个节点都作为系统服务启动,在 LocalSystem 帐户上运行,并启用与用户桌面的交互。 这是必需的,因为当没有与用户
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 8 年前。 Improve
由于某些限制,我们必须将服务作为 LocalSystem 运行。我已经生成证书并将它们放在以下商店中: 证书(本地计算机)证书 - 服务(SQL Server (MSSQLSERVER))证书 - 服
我有一个 .NET c# 服务在 Windows10 64 位上作为 LocalSystem 运行。它的工作是改变位于 下的“ProxyEnable”和“ProxyServer”值 HKEY_CURR
我是一名优秀的程序员,十分优秀!