在打包的时候,创建应用程序池,并自动将程序assign到新创建的池中(MSI制作)

该程序使用System.DirectoryServices库在IIS中创建新的应用程序池和虚拟目录,并将虚拟目录分配给指定的应用程序池。通过MSI安装时,可以自动化这些配置步骤。
using System;
using System.IO;
using System.DirectoryServices;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Collections;

namespace System_DirectoryServices_DirectoryEntry_ConfigIIS
{
  class Program
  {
    static void Main(string[] args)
    {


...
CreateAppPool("IIS://Localhost/W3SVC/AppPools", "MyAppPool");


...
CreateVDir("IIS://Localhost/W3SVC/1/Root", "MyVDir", "D://Inetpub//Wwwroot");


...
AssignVDirToAppPool("IIS://Localhost/W3SVC/1/Root/MyVDir", "MyAppPool");


...
}


...
static void CreateAppPool(string metabasePath, string appPoolName)
{
  //  metabasePath is of the form "IIS://<servername>/W3SVC/AppPools"
  //    for example "IIS://localhost/W3SVC/AppPools"
  //  appPoolName is of the form "<name>", for example, "MyAppPool"
  Console.WriteLine("/nCreating application pool named {0}/{1}:", metabasePath, appPoolName);

  try
  {
    if (metabasePath.EndsWith("/W3SVC/AppPools"))
    {
      DirectoryEntry newpool;
      DirectoryEntry apppools = new DirectoryEntry(metabasePath);
      newpool = apppools.Children.Add(appPoolName, "IIsApplicationPool");
      newpool.CommitChanges();
      Console.WriteLine(" Done.");
    }
    else
      Console.WriteLine(" Failed in CreateAppPool; application pools can only be created in the */W3SVC/AppPools node.");
  }
  catch (Exception ex)
  {
    Console.WriteLine("Failed in CreateAppPool with the following exception: /n{0}", ex.Message);
  }
}


...
static void CreateVDir(string metabasePath, string vDirName, string physicalPath)
{
  //  metabasePath is of the form "IIS://<servername>/<service>/<siteID>/Root[/<vdir>]"
  //    for example "IIS://localhost/W3SVC/1/Root"
  //  vDirName is of the form "<name>", for example, "MyNewVDir"
  //  physicalPath is of the form "<drive>:/<path>", for example, "C:/Inetpub/Wwwroot"
  Console.WriteLine("/nCreating virtual directory {0}/{1}, mapping the Root application to {2}:",
      metabasePath, vDirName, physicalPath);

  try
  {
    DirectoryEntry site = new DirectoryEntry(metabasePath);
    string className = site.SchemaClassName.ToString();
    if ((className.EndsWith("Server")) || (className.EndsWith("VirtualDir")))
    {
      DirectoryEntries vdirs = site.Children;
      DirectoryEntry newVDir = vdirs.Add(vDirName, (className.Replace("Service", "VirtualDir")));
      newVDir.Properties["Path"][0] = physicalPath;
      newVDir.Properties["AccessScript"][0] = true;
      // These properties are necessary for an application to be created.
      newVDir.Properties["AppFriendlyName"][0] = vDirName;
      newVDir.Properties["AppIsolated"][0] = "1";
      newVDir.Properties["AppRoot"][0] = "/LM" + metabasePath.Substring(metabasePath.IndexOf("/", ("IIS://".Length)));

      newVDir.CommitChanges();

      Console.WriteLine(" Done.");
    }
    else
      Console.WriteLine(" Failed. A virtual directory can only be created in a site or virtual directory node.");
  }
  catch (Exception ex)
  {
    Console.WriteLine("Failed in CreateVDir with the following exception: /n{0}", ex.Message);
  }
}


...
static void AssignVDirToAppPool(string metabasePath, string appPoolName)
{
  //  metabasePath is of the form "IIS://<servername>/W3SVC/<siteID>/Root[/<vDir>]"
  //    for example "IIS://localhost/W3SVC/1/Root/MyVDir"
  //  appPoolName is of the form "<name>", for example, "MyAppPool"
  Console.WriteLine("/nAssigning application {0} to the application pool named {1}:", metabasePath, appPoolName);

  try
  {
    DirectoryEntry vDir = new DirectoryEntry(metabasePath);
    string className = vDir.SchemaClassName.ToString();
    if (className.EndsWith("VirtualDir"))
    {
      object[] param = { 0, appPoolName, true };
      vDir.Invoke("AppCreate3", param);
      vDir.Properties["AppIsolated"][0] = "2";
      Console.WriteLine(" Done.");
    }
    else
      Console.WriteLine(" Failed in AssignVDirToAppPool; only virtual directories can be assigned to application pools");
  }
  catch (Exception ex)
  {
    Console.WriteLine("Failed in AssignVDirToAppPool with the following exception: /n{0}", ex.Message);
  }
}


...
  }
}
 
<think>根据用户的问题,用户希望了解如何使用Python Pandas创建新的DataFrame向列中添加数据。结合引用内容,特别是引用[2]和引用[3]中提到的创建DataFrame的方法,我们可以提供多种创建方式,演示如何向列中添加数据。 创建DataFrame的常见方法括: 1. 从列表创建括普通列表和嵌套列表) 2. 从字典创建(字典的键作为列名,值作为列数据) 3. 从Series创建 4. 创建空DataFrame逐列添加数据 此外,我们还需要演示如何向已存在的DataFrame中添加新列。 下面将按照这些方法逐一说明,给出代码示例。</think>### 使用Python Pandas创建DataFrame向列添加数据 #### 1. **创建空DataFrame逐列添加数据** ```python import pandas as pd # 创建空DataFrame df = pd.DataFrame() # 添加列数据 df['姓名'] = ['张三', '李四', '王五'] # 直接赋值新列 df['年龄'] = [25, 30, 28] # 添加第二列 df.insert(2, '城市', ['北京', '上海', '广州']) # 在指定位置插入列 print(df) ``` **输出**: ``` 姓名 年龄 城市 0 张三 25 北京 1 李四 30 上海 2 王五 28 广州 ``` #### 2. **从字典创建DataFrame(最常用)** ```python data = { '产品': ['手机', '平板', '笔记本'], '价格': [4999, 3299, 8999], '库存': [120, 85, 45] } df = pd.DataFrame(data) # 添加新列 df['折扣价'] = df['价格'] * 0.9 # 基于现有列计算新列 print(df) ``` **输出**: ``` 产品 价格 库存 折扣价 0 手机 4999 120 4499.1 1 平板 3299 85 2969.1 2 笔记本 8999 45 8099.1 ``` #### 3. **从列表创建DataFrame** ```python # 方法1:普通列表(需指定列名) data = [['A001', '电视', 2999], ['A002', '冰箱', 4599]] df = pd.DataFrame(data, columns=['ID', '名称', '价格']) # 方法2:嵌套字典列表 data = [ {'姓名': '张三', '分数': 92}, {'姓名': '李四', '分数': 88} ] df = pd.DataFrame(data) print(df) ``` #### 4. **向现有DataFrame添加列** ```python # 添加常量列 df['部门'] = '销售部' # 所有行相同值 # 添加条件列 df['等级'] = ['优秀' if x >= 90 else '合格' for x in df['分数']] # 用assign添加(返回新DataFrame) df = df.assign(奖金=lambda x: x['分数'] * 10) ``` #### 5. **注意事项** - 列长度必须与行数一致,否则报错 `ValueError` - 使用 `df.insert(位置索引, 列名, 数据)` 可精确控制列位置 - 避免用 `df.新列名 = 数据` 语法(不符合PEP8规范) > **关键操作总结**: > 1. 创建:`pd.DataFrame(字典/列表)` > 2. 添加列:`df['列名'] = 数据` 或 `df.insert()` > 3. 动态列:`df.assign(新列=lambda x: 计算表达式)` > 4. 条件列:结合列表推导式或 `np.where()`[^2][^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值