我正在为 Web 应用程序编写基于 Wix 的设置,并希望对其安装的文件夹设置权限,以便 IIS 可以访问它们。
IIS 6 和 7 分别使用IIS_WPG
and IIS_USRS
,而 IIS 5 使用IUSR_COMPUTER NAME
. 但是,如果用户更改了他们的计算机名称,则使用当前计算机名称设置权限将失败。
有没有办法以编程方式确定 IIS 5 正在使用的用户帐户,而不仅仅是假设它会是IUSR_COMPUTERNAME
?
我正在这样做(不要假装提供最佳实践解决方案) - 这是一个即时 CA,它设置您以后可以使用的属性:
[CustomAction]
public static ActionResult SetIUSRAccountNameAction(Session session)
{
ActionResult actionResult = ActionResult.Failure;
DirectoryEntry iisAdmin = new DirectoryEntry("IIS://localhost/W3SVC");
if (iisAdmin != null)
{
string iusrName = (string)iisAdmin.Properties["AnonymousUserName"][0];
if (!string.IsNullOrEmpty(iusrName))
{
session["IUSR_USERNAME"] = iusrName;
string iusrDomain = GetAccountDomain(iusrName, session);
if (!string.IsNullOrEmpty(iusrDomain))
{
session["IUSR_DOMAIN"] = iusrDomain;
}
actionResult = ActionResult.Success;
}
}
return actionResult;
}
GetAccountDomain 方法的定义如下:
static string GetAccountDomain(string accountName, Session session)
{
SelectQuery query = new SelectQuery("Win32_UserAccount", string.Format("Name='{0}'", accountName), new string[] { "Domain" });
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
try
{
foreach (ManagementObject account in searcher.Get())
{
return (string)account["Domain"];
}
}
catch (Exception ex)
{
session.Log("Failed to get a domain for the user {0}: {1}", accountName, ex.Message);
}
return null;
}
希望这可以帮助。