如题,我使用C#编写一个安装程序,配置好虚拟目录,但是有几个子节目录需要转换为应用程序才能使用,但是现在的问题是,这把目录转换为应用程序的步骤不知道怎么用代码实现,虽然可以手动在IIS里右键设置很简单,但是要批量安装制作的话,手动配置明显不可行,所以我想在代码里实现自动配置,请教各位大神支招,求解
public static void CreateNetsiteApp(int siteId)
{
DirectoryEntry webService = new DirectoryEntry("IIS://LocalHost/W3SVC/" + siteId + "/ROOT");
//
foreach (DirectoryEntry webDir in webService.Children) // 运行到这里就退出,不执行循环
{
if (webDir.SchemaClassName.Equals("IIsWebDirectory"))
{
object b = webDir.Name.ToString();
//如果站点下的目录名称为lismain或者Lisbase
if (webDir.Name.Equals("LisMain") || webDir.Name.Equals("LisBase"))
{
webDir.Invoke("AppCreate", true);
webDir.CommitChanges();
webService.CommitChanges();
}
}
}
}
大神们看看这方法对不对,为什么我获取不到虚拟路径下的数据?
"IIS://LocalHost/W3SVC/" + siteId + "/ROOT" 这个路径是获取的网站的虚拟地址吗?为什么他的子节点没有数据,是不是和我站点的设置有关?我站点的设置都配置好了啊
已解决!
DirectoryEntry site = (DirectoryEntry)root.Invoke("Create", "IIsWebServer", siteID);
...
DirectoryEntry tbEntry = site.Children.Add("Root", "IISWebVirtualDir");
...
DirectoryEntry de = tbEntry.Children.Add("LisMain", tbEntry.SchemaClassName);
de.CommitChanges();
de.Properties["Path"].Value = virtualPath;
de.Properties["AccessRead"][0] = true; // 勾选读取
de.Invoke("AppCreate", true);
de.Properties["EnableDefaultDoc"][0] = true;
de.Properties["AccessScript"][0] = true; // 脚本资源访问
de.Properties["DontLog"][0] = true; // 勾选记录访问
de.Properties["ContentIndexed"][0] = true; // 勾选索引资源
de.Properties["AppFriendlyName"][0] = "LiaMain"; //应用程序名
de.Properties["AuthFlags"][0] = 5;
//层层虚拟目录下找到目录节点,然后创建的应用程序,方法笨了些,但可以实现,希望大神们给点建议和更好的方案