InstallShield的Custom Action

来源:互联网 发布:爱知中学小升初 编辑:程序博客网 时间:2024/05/13 15:44

地址:http://www.cnblogs.com/ivybell/

2012-2-24
静默卸载exe格式的程序

近段时间给用户升级版本,但是旧版本是很早之前的人制作安装的,现在是需要卸载旧版本然后安装新版本,并且需用策略分发。

所以研究了下静默卸载exe。看了网上许多资料,大多是最msi进行静默卸载的,即使是exe也是一带而过。

代码如下:

 


szKey1 = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{49B4D1B2-735C-4585-8729-40C94CCF9E4B}"; 
 RegDBSetDefaultRoot( HKEY_LOCAL_MACHINE );
 if(RegDBKeyExist (szKey1) < 0) then          
     MessageBox("没有找到旧版本,请直接安装新版本,而不是安装升级包。",INFORMATION); 
    endif;

//杀进程,方便卸载干净
 szApplicationPath = WINSYSDIR^"taskkill.exe"; 
 szApplicationCmdLine = "123.exe"; 
 LongPathToQuote( szApplicationPath, TRUE );
 szCmdLine = szApplicationPath +  " " + "/f" + " " + "/im" + " " + "\"" + 
 szApplicationCmdLine + "\"";  
 LaunchAppAndWait("", szCmdLine, WAIT); 
 
   szApplicationCmdLine0 =WINDIR^"setup-old.exe";//前提:setup-old.exe要存在,且知道路径,如果不知道可以放同样版本的安装程序放进去
    szCmdLine0="-"+"removeonly"+" "+"-"+"s"; 
    LaunchAppAndWait(szApplicationCmdLine0, szCmdLine0, WAIT);    
 //删除安装文件夹,以彻底去除残留文件
 DeleteDir("C:\\Program Files\\test", ALLCONTENTS);

 

版权声明:转载请注明原始出处。 

posted @ 2012-02-24 17:50 蓝欣児 Views(42) Comments(0) Edit
2012-2-23
Installshield:写注册表时,路径用二进制表示

lastPath = "SOFTWARE\\testAPI\\DL\\{692bcef0-4540-11d3-a8f3-0090271d266f}\\testDirectory";//注册表路径  
 RegDBSetDefaultRoot( HKEY_LOCAL_MACHINE ); 
 svPath = WINSYSDIR^"BioAPIFFDB\\testDirectory";
  nSize = StrLength(svPath)+1; 
    RegDBCreateKeyEx(lastPath,"");     
    RegDBSetKeyValueEx(lastPath,"AdditionalInformation",REGDB_BINARY,svPath,nSize); 

 

posted @ 2012-02-23 13:44 蓝欣児 Views(21) Comments(0) Edit
2011-7-28
我的IS笔记--比较乱

1、win7 vista解决安装在C盘不能卸载干净的方法,赋予权限:

Windows Registry Editor Version 5.00

  [HKEY_CLASSES_ROOT\*\shell\runas]

  @="管理员取得所有权"

  "NoWorkingDirectory"=""

  [HKEY_CLASSES_ROOT\*\shell\runas\command]

  @="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"

  "IsolatedCommand"="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"

  [HKEY_CLASSES_ROOT\exefile\shell\runas2]

  @="管理员取得所有权"

  "NoWorkingDirectory"=""

  [HKEY_CLASSES_ROOT\exefile\shell\runas2\command]

  @="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"

  "IsolatedCommand"="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"

  [HKEY_CLASSES_ROOT\Directory\shell\runas]

  @="管理员取得所有权"

  "NoWorkingDirectory"=""

  [HKEY_CLASSES_ROOT\Directory\shell\runas\command]

  @="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t"

  "IsolatedCommand"="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t"

存成XX.reg  然后运行  再装了试试
如果可以就自己按照这个用IS写注册表

2、64位注册表的问题:
REGDB_OPTION_WOW64_64KEY 
这是32位下的代码:
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);  

    if (RegDBKeyExist ("SOFTWARE\\Apache Software Foundation\\Tomcat\\6.0") < 0) then
           // MessageBox ("You haven't installed JRE 1.6.0_04 yet! ", INFORMATION);
            LaunchAppAndWait ("../tomcat\\apache-tomcat-6.0.24.exe", "", LAAW_OPTION_WAIT);
        endif;
64位下的,我在代码前加了Enable(REGDB_OPTION_WOW64_64KEY);但是毫无效果

调用之前添加这么一行
REGDB_OPTIONS = REGDB_OPTION_WOW64_64KEY

判断代码:SYSINFO.bIsWow64

3、如何检测第三方软件是否安装,不知道安装路径的情况下 
用RegDBKeyExist检查注册表 

如果我不知道第三方软件的注册表值,那搜索注册表。

读取 SOFTWARE/MICROSOFT/WINDOWS/CURRENTVERSION/UNINSTALL,查看是否包括相应的项,然后在脚本里判断相应的CLSID值
迅(38495561)  17:29:19
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE); 
if (RegDBKeyExist("SOFTWARE \\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{9A25302D-30C0-39D9-BD6F-21E6EC160475}")< 0) then       
 if (RegDBKeyExist("SOFTWARE \\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{86CE1746-9EFF-3C9C-8755-81EA8903AC34}")< 0) then       
  if(LaunchAppAndWait(SRCDIR^"reases\\插件 \\vcredist_x86.exe","", LAAW_OPTION_WAIT)<0)then 
     if( FindFile(SRCDIR^"program files\\软件\\插件","vcredist_x86.exe",svResult)=0 ) then    
         MessageBox("系统检测到没有安装插件,现在要进行安装!", WARNING);
         LaunchAppAndWait( SRCDIR^"program files\\软件\\插件 \\vcredist_x86.exe","",NOWAIT );
     endif;      
  endif; 
 endif;   
endif;

参考文章:
http://www.cnblogs.com/Cindy_weiwei/archive/2009/05/19/1460261.html
参阅第四部分:补遗

 http://www.appinstall.cn/viewthread.php?tid=670&extra=page%3D2
这是枚举注册表键值

4、OnBegin里加这一句,就没有—installshieldWizard:SetTitle(IFX_PRODUCT_NAME, 0, BACKGROUNDCAPTION);
  function OnBegin()
string szMyCustomTitle;
begin 
 szMyCustomTitle = IFX_PRODUCT_NAME + " " + IFX_PRODUCT_VERSION;
    SetTitle(szMyCustomTitle , 0, BACKGROUNDCAPTION);
end;

5、Basic MSI的序列号存在一个Property,想在ISX_SERIALNUM位置校验Kevin Wan(17842153)  16:05:28
)大概这样一个逻辑:

1,写脚本校验Property ISX_SERIALNUM的值
2,将脚本函数与Custom Action绑定
3,在Next控件中添加一个Event,调用你的CA,条件为:1
补充一下,校验结果还得存在一个Property中
4,你的Next控件Conditions中,根据校验结果控制Disable和Enable

其中Property的读写你用MsiGetProperty 和MsiSetProperty 
步骤3中:添加DoAction的Event,调用CA

6、如果在install design的splash screen里加入一张名为setup.bmp的图片,并且把release->small initiliaze dialog设为yes,安装一开始会展示出你的图片,效果非常漂亮

installscript工程自带的SdFinish(在OnFirstUIAfter里)允许你添加两个checkbox,不过如果你要添加三个,就得用SdAskOptions,但是这个界面无法默认做为最后一个结束界面,只能插入到SdFinish前面

7、不能用直接aunchAppAndWait调用cpl文件,需要和C:\Winnt\system32\control.exe相关联
LaunchAppAndWait (环境路径, 被打开的对象, WAIT);
 szApplicationPath = WINSYSDIR64^"msiexec.exe "; 
 szApplicationCmdLine = INSTALLDIR^"tfmessbspsetup.msi"; 
 LongPathToQuote( szApplicationPath, TRUE );
 szCmdLine = szApplicationPath +  " " + "/i" + " " + "\"" + szApplicationCmdLine + "\"" ;  
 LaunchAppAndWait ("", szCmdLine, WAIT); 
即:
C:\WINDOWS\system32\control.exe "C:\Program Files\Biocome\Bio-Trust Fingerprint Logon-server\monitor.cpl"

8、补丁包 增加快捷方式

szCommandLine = TARGETDIR ^  svKeyName;
             szIconPath = szCommandLine;
             LongPathToQuote  (szCommandLine, TRUE); 
             nResult = AddFolderIcon(szProgram, svKeyVal, 
                                     szCommandLine, 
                                     szWorkingDir, 
                                     szIconPath,
                                     nIcon, 
                                     szShortCutKey,nFlag);
                
                if(nResult<0) then 
                   MessageBox("创建快捷方式: " + svKeyVal + "=>" + szCommandLine + " 失败", INFORMATION);
                endif;
                nVal = ListGetNextString (listKeyNames, svKeyName);
                if !(nVal = END_OF_LIST) then
                    ListGetNextString (listKeyValues, svKeyVal);
                endif;

//添加开始菜单里的快捷方式
    AddFolderIcon(
      FOLDER_PROGRAMS^m_strShowPDMName+@ID_SHORTCUTPDM,  
         @ID_SHORTCUTGSMSG,
         "\""+TARGETDIR^m_strPDMPATH+" \\GSMsg.exe\" ",
         TARGETDIR^m_strPDMPATH,
         "",
         0,
         "",
         REPLACE);    

9、安装系统后,从系统的一个位置拷贝一个文件到另外一个位置:
CopyFile (WINSYSDIR^"msgina.dll", INSTALLDIR^"oldmsgina.dll");

10、通过域分发部署软件,增加Transforms文件的命令参数调用方法:msiexec /i "ProductName.msi" TRANSFORMS="YourTransform.mst"

InstallShield 2009 Premier, Basic MSI Project:
After uninstall completes, I want to force restart the computer. How?
Googling found, i have to set 'REBOOTPROMPT' TO 'S' or 'R' and the "Reboot" property.
How to set these properties and with what values?


Here is the Solution
1. You have to let InstallShield know that you want a reboot.
How?: From 'Installation Designer' tab -> 'Behavior and Logic' -> 'Custom Actions and Sequences' -> 'Sequences' -> 'Installation' -> 'Execute' -> 'ScheduleReboot' set the value of 'Conditions' to "NOT REMOVE" (with out the inverted commas) if you want the reboot to happen after install and to "REMOVE" if after uninstall.
2. So up to now after install/uninstall the installer would show a warning message something like "... click ok to restart your machine now or cancel to restart later...". Now if you don't want to show this warning message even do step 3.
3. Go to 'Installation Designer' tab -> 'Behavior and Logic' -> 'Property Manager', a table would be open. Now add/edit the (Name, Value) pair with (REBOOTPROMPT, Suppress). This would suppress the message.

11、停止进程:
szApplicationPath = WINSYSDIR^"taskkill.exe"; 
 szApplicationCmdLine = "FPLockWindow.exe"; 
 LongPathToQuote( szApplicationPath, TRUE );
 szCmdLine = szApplicationPath +  " " + "/f" + " " + "/im" + " " + "\"" + szApplicationCmdLine + "\"";  
 LaunchAppAndWait("", szCmdLine, WAIT);

12、INFO:InstallShield中Basic MSI工程类型如何调用InstallScript脚本 : 

A. 首先在Installation Designer/Behavior and Logic/InstallScript视图中,选中Files点击鼠标右键选择“New Script File”,默认会生成一个setup.rul的文件,并有一个MyFunction的函数声明和。 

B. 之后我们在MyFunction函数内添加一行代码:MessageBox("MyFunction", INFORMATION);

当然,你也可以修改函数名,用更有实际意义字符串代替。 

C. 在Installation Designer/Behavior and Logic/Custom Actions and Sequences视图中,选中顶端的Custom Actions点击鼠标右键选择“Custom Action Wizard”(这里的Custom Action我们经常也简称为CA),下面按着向导逐步说明。

1. 第一个界面是Custom Action Wizard欢迎界面。
2.在第二个Basic Information界面中,选择CA的Name,而Comment可忽略。
3.在第三个Action Type界面中,在Type的下拉菜单中选择Run InstallScript Code。(这里你会发现你可以通过CA调用托管代码,其他可执行程序,以及JScript,VBScript等)
4.在第四个Action Parameters界面中,在Source的下拉菜单选择的MyFunction。(如果脚本Setup.rul中你有多个函数声明,你会发现都会显示到下拉菜单中)
5.之后的界面都按照默认设置,直到点击Finish结束。 

D. 在同一树状结构中,Sequences/Installation/Execute,选中Execute点击鼠标右键选择Insert,你会看到在C中你添加的CA,选中你的CA,然后设置Condition。(注意如果是想在安装时执行:Not Installed;如果是卸载执行:Installed) 

E. 有关我们的CA在Sequence中的位置, 可根据情况调整位置。

13、工程basic msi。
要求某个文件在安装的时候添加进去,但是卸载的时候保留,怎么操作。
把这个文件的属性指定为permanent
如果是脚本添加的文件,可以在添加语句前后把IS的日志禁用掉
Disable(LOGGING);
添加文件的语句
Enable(LOGGING);

14、安装包打日志:
c:\Setup.exe /Verbose"C:\Setup.log"
c:\Setup.msi /log"C:\Setup.log"

15、在Basic MSI工程里,可以通过AppDataFolder这个变量获取到类似下面的目录
C:\Documents and Settings\user\Application Data
在installscript工程用FOLDER_APPDATA

posted @ 2011-07-28 13:55 蓝欣児 Views(66) Comments(0) Edit
2011-7-7
安装和配置企业根 CA

安装和配置企业根 CA

现在需要以企业管理员的身份登录,例如以 Enterprise Admins 组和根域的 Domain Admins 组的成员帐户登录。

要求

凭据:必须以 Enterprise Admins 组和根域的 Domain Admins 组的成员帐户登录。

工具:Windows 组件向导。

此任务只能在运行 Windows Server 2003, Standard Edition、Windows Server 2003, Enterprise Edition 或 Windows Server 2003, Datacenter Edition 的服务器上完成。

安装和配置企业根 CA

1.

作为 Enterprise Admins 组和根域的 Domain Admins 组的成员登录。

2.

单击“开始”,再单击“控制面版”,再单击“添加和删除程序”,然后单击“添加 Windows 组件”。

3.

在“Windows 组件向导”中,选中“证书服务”复选框。然后会出现一个对话框,通知您在证书服务安装之后计算机不能被重新命名以及计算机不能加入域或从域中删除。单击“是”。

注意: 如果要使用证书服务的 Web 组件,应单击“应用服务器”(但不要选中它的复选框)以确保“IIS”复选框已选中,然后单击“详细信息”,选中“Internet 信息服务 (IIS)”,然后单击“确定”。

单击“下一步”

4.

在“CA 类型”页面上,选择“企业根 CA”,然后单击“下一步”。

screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>

注意: 私钥总是存储在本地服务器上,除非使用加密硬件设备。在公钥被存放在证书上的情况下,私钥被存储在设备上。公钥位于证书中。

5.

在“CA 信息标识”页面提供适于您的站点和组织的信息标识。

1.

在“此 CA 的公用名称”中,输入证书颁发机构的公用名称。

CA 名称(或公用名称)很重要,因为要用它来标识在 Active Directory 中创建的 CA 对象。

2.

在“有效期”中选择接受5年的默认选项,然后单击“下一步”,

其中“有效期”是 CA 有效的时间,即安全和管理之间的权衡。请记住,在每次根证书到期的时候,管理员必须更新所有信任关系,并要采取一些管理性步骤把 CA 转移到新的证书上。在大多数企业环境中,通常的时间期限是 5 年或更多,但是要符合正式的 IT 策略和程序。同时向您的律师咨询,以确保 CA 配置符合所有法律要求。screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>

6.

在“证书数据库设置”页面,单击“下一步”接受证书数据库的默认存储路径和证书数据库日志,然后确认“将配置信息存储在共享文件夹内”没有选中。

注意: 安装程序可能会给出“不能创建共享文件夹”的警告信息,这是预料中的,因为所有网络接口都已禁用。安全的做法是忽略这一警告,继续进行后面的操作。此外一定要将证书数据库和证书数据库日志存储在本地 NTFS 驱动器上。screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>

7.

如果 IIS 正在运行,将会有信息提示您停止该设备。单击“是”停止 IIS。必须在 Web 组件安装之前停止 IIS。

注意: 如果没有安装 IIS,则不会显示该消息,Web 注册也不可用,除非已安装 IIS。

然后,可选组件管理器将安装证书服务组件。如果需要 Windows Server 2003 安装媒体 (CD),请将 Windows Server 2003 产品 CD 插到 CD 驱动器中。

8.

单击“确定”完成安装。单击“完成”关闭向导。

安装 CA 后,请将证书模板添加到 CA 中,并对 CA 进行配置以允许主题能够请求基于模板的证书。

注意:如果自己建议或者计划采用指南中的建议来加强组织内域控制器的安全性,需要修改域的组策略设置以启用证书服务。若要了解完成此项任务的更多信息,请在 Security Guidance Kit 中参考文档“Securing Windows Server 2003 Domain Controllers”(英文)。

验证 CA 安装

验证 CA 安装是否成功的最简单的方法是输入 net start ,看 CA 是否运行。

如要进一步验证或要处理中间出现的故障错误,还可以在 systemroot\certocm.log 中查看 CA 安装日志。

还可以采用以下的步骤

要求

凭据:必须以 Enterprise Admins 组和本地管理员组的成员帐户在运行 CA 的计算机上登录。

工具:CA 管理单元。

此任务只能在运行 Windows Server 2003, Standard Edition、Windows Server 2003, Enterprise Edition 或 Windows Server 2003, Datacenter Edition 的服务器上完成。

posted @ 2011-07-07 13:46 蓝欣児 Views(299) Comments(0) Edit
2011-6-21
彻底清除备份域服务器数据元的方法

 如果备份域服务器损坏了,不能恢复正常,而且不能使用dcpromo删除,这时主域服务器支撑着整个域基本上能正常工作,但是不能添加备份域服务器了。要添加备份域服务器,必须把域中的“备份域服务器的元数据”删除掉才能继续。彻底清除备份域数据元的方法:

1. 在主域控制器上运行ntdsutil

C:\>ntdsutil(该工具在2003系统盘中Support\Tools\SupTools.msizhong,假设拷贝到C盘的根目录中,红色字为输入的命令)

ntdsutil: metadata cleanup

metadata cleanup: contections

server connections: connect to domain 域名

server connections: quit

metadata cleanup: select operation target

select operation target: list domains(列出您所有的域)

select operation target: select domain 0 (选择您需要删除域控制器所在的domain)

select operation target: list sites(列出您需要域中所在的site)

select operation target: select site 0(选择您需要删除域控制器所在的site)

select operation target: list servers in site(列出该site中所存在的服务器)

select operation target: select server 2(选择您需要删除域控制器)

select operation target: quit

metadata cleanup: remove selected server

metadata cleanup: quit

2、打开主域服务器的DNS,删除备份域服务器的所有信息

3、打开主域服务器的“AD目录与计算机”删除备份域服务器的所有信息
      \Domain Controllers
      \System MicrosoftDNS\szwj(域名)\
      ......
      等等目录下的备份域服务器的所有信息

4、打开主域服务器的“AD站点与服务”删除无用的服务器

一、Active Directory操作主机角色概述
Active Directory 定义了五种操作主机角色(又称FSMO): 
架构主机 schema master、
域命名主机 domain naming master
相对标识号 (RID) 主机 RID master
主域控制器模拟器 (PDCE) 
基础结构主机 infrastructure master
而每种操作主机角色负担不同的工作,具有不同的功能:
架构主机
具有架构主机角色的 DC 是可以更新目录架构的唯一 DC。这些架构更新会从架构主机复制到目录林中的所有其它域控制器中。 架构主机是基于目录林的,整个目录林中只有一个架构主机。
域命名主机 
具有域命名主机角色的 DC 是可以执行以下任务的唯一 DC: 
向目录林中添加新域。 
从目录林中删除现有的域。 
添加或删除描述外部目录的交叉引用对象。 
相对标识号 (RID) 主机
此操作主机负责向其它 DC 分配 RID 池。只有一个服务器执行此任务。在创建安全主体(例如用户、
组或计算机)时,需要将 RID 与域范围内的标识符相结合,以创建唯一的安全标识符 (SID)。 每一个 
Windows 2000 DC 都会收到用于创建对象的 RID 池(默认为 512)。RID 主机通过分配不同的池来确保这
些 ID 在每一个 DC 上都是唯一的。通过 RID 主机,还可以在同一目录林中的不同域之间移动所有对象。
域命名主机是基于目录林的,整个目录林中只有一个域命名主机。相对标识号(RID)主机是基于域的,目录林中的每个域都有自己的相对标识号(RID)主机
PDCE 
主域控制器模拟器提供以下主要功能: 
向后兼容低级客户端和服务器,允许 Windows NT4.0 备份域控制器 (BDC) 加入到新的 Windows 2000 环境。 本机 Windows 2000 环境将密码更改转发到 PDCE。每当 DC 验证密码失败后,它会与 PDCE 取得联系,以查看该密码是否可以在那里得到验证,也许其原因在于密码更改还没有被复制到验证 DC 中。 
时间同步 — 目录林中各个域的 PDCE 都会与目录林的根域中的 PDCE 进行同步。
PDCE是基于域的,目录林中的每个域都有自己的PDCE。 
基础结构主机
基础结构主机确保所有域间操作对象的一致性。当引用另一个域中的对象时,此引用包含该对象的
全局唯一标识符 (GUID)、安全标识符 (SID) 和可分辨的名称 (DN)。如果被引用的对象移动,则在域中担
当结构主机角色的 DC 会负责更新该域中跨域对象引用中的 SID 和 DN。
基础结构主机是基于域的,目录林中的每个域都有自己的基础结构主机
默认,这五种FMSO存在于目录林根域的第一台DC(主域控制器)上,而子域中的相对标识号 (RID) 主机、PDCE 、基础结构主机存在于子域中的第一台DC。

--------------------------------------------------------------------------------
二、环境分析
公司Test.com(虚拟)有一台主域控制器DC-01.test.com,还有一台额外域控制器DC-02.test.com。现主域控制器(DC-01.test.com)由于硬件故障突然损坏,事先又没有DC-01.test.com的系统状态备份,没办法通过备份修复主域控制器(DC-01.test.com),我们怎么让额外域控制器(DC-02.test.com)替代主域控制器,使Acitvie Directory继续正常运行,并在损坏的主域控制器硬件修理好之后,如何使损坏的主域控制器恢复。
如果你的第一台DC坏了,还有额外域控制器正常,需要在一台额外域控制器上夺取这五种FMSO,并需要把额外域控制器设置为GC。

--------------------------------------------------------------------------------
三、从AD中清除主域控制器DC-01.test.com对象
3.1在额外域控制器(DC-02.test.com)上通过ntdsutil.exe工具把主域控制器(DC-01.test.com)从AD中删除;(棕色字体为输入的命令)
c:>ntdsutil
ntdsutil: metadata cleanup
metadata cleanup: select operation target
select operation target: connections
server connections: connect to domain test.com
server connections:quit
select operation target: list sites
Found 1 site(s)
0 - CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=com
select operation target: select site 0
Site - CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=com
No current domain
No current server
No current Naming Context
select operation target: List domains in site
Found 1 domain(s)
0 - DC=test,DC=com
Found 1 domain(s)
0 - DC=test,DC=com
select operation target: select domain 0
Site - CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=com
Domain - DC=test,DC=com
No current server
No current Naming Context
select operation target: List servers for domain in site
Found 2 server(s)
0 - CN=DC-01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=te
st,DC=com
1 - CN=DC-02,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=te
st,DC=com
select operation target: select server 0
select operation target: quit
metadata cleanup:Remove selected server

出现对话框,按“确定“删除DC-01主控服务器。
metadata cleanup:quit
ntdsutil: quit

3.2使用ADSI EDIT工具删除Active Directory users and computers中的Domain controllers中DC-01服务器对象,
ADSI EDIT是Windows 2000 support tools中的工具,你需要安装Windows 2000 support tool,安装程序在windows 2000光盘中的support\tools目录下。打开ADSI EDIT工具,展开Domain NC[DC-02.test.com],展开OU=Domain controllers,右击CN=DC-01,然后选择Delete,把DC-01服务器对象删除,
3.3 在Active Directory Sites and Service中删除DC-01服务器对象
打开Administrative tools中的Active Directory Sites and Service,展开Sites,展开Default-First-Site-Name,展开Servers,右击DC-01,选择Delete,单击Yes按钮,

--------------------------------------------------------------------------------
四、在额外域控制器上通过ntdsutil.exe工具执行夺取五种FMSO操作
c:>ntdsutil
ntdsutil: roles
fsmo maintenance: Select operation target
select operation target: connections
server connections: connect to domain test.com
server connections: quit
select operation target: list sites
Found 1 site(s)
0 - CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=com
select operation target: select site 0
Site - CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=com
No current domain
No current server
No current Naming Context
select operation target: List domains in site
Found 1 domain(s)
0 - DC=test,DC=com
select operation target: select domain 0
Site - CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=com
Domain - DC=test,DC=com
No current server
No current Naming Context
select operation target: List servers for domain in site
Found 1 server(s)
0 - CN=DC-02,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=te
st,DC=com
select operation target: select server 0
select operation target: quit
fsmo maintenance:Seize domain naming master
出现对话框,按“确定“
fsmo maintenance:Seize infrastructure master
出现对话框,按“确定“
fsmo maintenance:Seize PDC
出现对话框,按“确定“
fsmo maintenance:Seize RID master
出现对话框,按“确定“
fsmo maintenance:Seize schema master
出现对话框,按“确定“
fsmo maintenance:quit
ntdsutil: quit
(注:Seize是在原FSMO不在线时进行操作,如果原FSMO在线,需要使用Transfer操作)

--------------------------------------------------------------------------------
五、设置额外控制(DC-02.test.com)为GC(全局编录)
打开Administrative Tools中的Active Directory Sites and Services,展开Sites,展开Default-First-Site-Name,展开Servers,展开DC-02.test.com(额外控制器),右击NTDS Settings选择Properties,然后在"Global Catalog"前面打勾,单击"确定"按钮,然后重新启动服务器。
--------------------------------------------------------------------------------
六、重新安装并恢复损坏主域控制器
修理好DC-01.test.com损坏的硬件之后,在DC-01.test.com服务器重新安装Windows 2000 Server,安装好Windows 2000 Server之后,再运行Dcpromo升成额外的域控制器;如果你需要使DC-01.test.com担任五种FMSO角色,通过ntdsutil工具进行角色转换,进行Transfer操作就行了(注意:不能用Seize)。并通过Active Directory Sites and Services设置DC-01.test.com为GC,取消DC-02.test.com的GC功能。
建议domain naming master不要和RID master在一台DC上,而domain naming master同时必须为GC。
--------------------------------------------------------------------------------
附:用于检测AD中五种操作主机角色的脚本
给大家一个脚本,用于检测AD中五种FSMO角色,把下面的代码,保存为FSMO.VBS,然后执行它.
Set objRootDSE = GetObject("LDAP://rootDSE")

Dim text

'' Schema Master
Set objSchema = GetObject("LDAP://" & objRootDSE.Get("schemaNamingContext"))
strSchemaMaster = objSchema.Get("fSMORoleOwner")
Set objNtds = GetObject("LDAP://" & strSchemaMaster)
Set objComputer = GetObject(objNtds.Parent)
text="Forest-wide Schema Master FSMO: " & objComputer.Name & vbCrLf

Set objNtds = Nothing
Set objComputer = Nothing

'' Domain Naming Master
Set objPartitions = GetObject("LDAP://CN=Partitions," & _
objRootDSE.Get("configurationNamingContext"))
strDomainNamingMaster = objPartitions.Get("fSMORoleOwner")
Set objNtds = GetObject("LDAP://" & strDomainNamingMaster)
Set objComputer = GetObject(objNtds.Parent)
text=text&"Forest-wide Domain Naming Master FSMO: " & objComputer.Name & vbCrLf

Set objNtds = Nothing
Set objComputer = Nothing

'' PDC Emulator
Set objDomain = GetObject("LDAP://" & objRootDSE.Get("defaultNamingContext"))
strPdcEmulator = objDomain.Get("fSMORoleOwner")
Set objNtds = GetObject("LDAP://" & strPdcEmulator)
Set objComputer = GetObject(objNtds.Parent)
text=text&"Domain''s PDC Emulator FSMO: " & objComputer.Name & vbCrLf

Set objNtds = Nothing
Set objComputer = Nothing

'' RID Master
Set objRidManager = GetObject("LDAP://CN=RID Manager$,CN=System," & _
objRootDSE.Get("defaultNamingContext"))
strRidMaster = objRidManager.Get("fSMORoleOwner")
Set objNtds = GetObject("LDAP://" & strRidMaster)
Set objComputer = GetObject(objNtds.Parent)
text=text&"Domain''s RID Master FSMO: " & objComputer.Name & vbCrLf


Set objNtds = Nothing
Set objComputer = Nothing

'' Infrastructure Master
Set objInfrastructure = GetObject("LDAP://CN=Infrastructure," & _
objRootDSE.Get("defaultNamingContext"))
strInfrastructureMaster = objInfrastructure.Get("fSMORoleOwner")
Set objNtds = GetObject("LDAP://" & strInfrastructureMaster)
Set objComputer = GetObject(objNtds.Parent)
text=text&"Domain''s Infrastructure Master FSMO: " & objComputer.Name & vbCrLf

text=text & vbCrLf &" Design by coolnetboy(coolnetboy@hotmail.com)"
WScript.Echo text


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/dongbo66/archive/2009/03/18/3997375.aspx


原创粉丝点击