求教远程格式化硬盘。(100分)

  • 主题发起人 主题发起人 zychero
  • 开始时间 开始时间
Z

zychero

Unregistered / Unconfirmed
GUEST, unregistred user!
专家你们好:
我有一个问题向你们请教,我现在用delphi已实现(在局域网内)通过服务器控制客户端(约50台)进行重启,我使用的是API函数的调用,现在我想实现对所有的客户端进行硬盘,如E盘的格式化,有没有比较好的方法可以实现。如何取得客户端E盘盘符的信息呀?我的服务器用的是win2000server。
客户端是WIN98/WIN2000。小弟实在想不出什么好办法,在这里先谢谢大家帮忙了。
 
做一个格式化程序,放到工作站,在注册表中的Runonce 内加入,
然后重新启动每一台机器
OK?
 
每台机子放个可以格式化的程序,服务器控制运行
 
首先谢谢你的建议。我是想通过CLIENTSOCKET/SERVERSOCKET来完成它。只需在服务器上进行操作,就能完成很多客户端E盘的格式化。客户端只需监听、接收。你的方法也很好,但这个格式化程序怎么写,能告诉我吗?可以有偿提供,急呀,在线等待?
 
如何写呀,我正是想达到这个目的。求教?
 
谁得罪你了啊?
 
我管理学校电脑机房的需要,硬盘的E区需要一段时间后格式化进行整理。可不是恶意破坏呀[:D]
 
给你思路,写好了给我一份:
1,先写一个格式化E的软件,让它运行一次后,放在注册表中,每次启动机器自动运行。,2,在服务器上向所有的机器发送消息。你的那个程序,一接收到这个消息,
就把E盘格了。
 
在注册表中加入格式化信息,利用DELPHI可以做到,这种方法有可能更容易实现。但是如何写出一个格式化程序,只需在服务器进行控制,客户端自动完成格式化,我还不清楚,望高手们指教。最好有这样类似的原程序。帮帮小弟,学校里的工作也不好作啊。
 
客户端收到命令后运行format e:
 
但我现在只知道DELPHI只能调用API函数啊,“FORMAT E:”这条指令如何能在DELPHI 程序中实现呀。请大家指教[:)]。
 
WinExec('cmd /c format e:,SW_minimized);
 
用PCANYWHERE,想如何做都可以。
 
我原来写了一个这样的程序,不过当时是为了害人做的,不知道你是否是想达到同样的目的[:D]因为这种程序我实在想不出来有什么用处--除了害人!
不过要的话mail to me:tufeiping@hotmail.com
 
这是客户端的程序:
procedure TForm2.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
if socket.ReceiveText='format' then
WinExec('cmd /c format e:,SW_minimized');
end;
其中:'format'仅是服务器发来的一个信息。
我这样试了,但是不行啊,不知错在哪里,是不是这个API函数不能直接引用啊,请指教。我是新手,希望大家再帮小弟一把。
 
WinExec('cmd /c format e:,SW_minimized');
改成WinExec('cmd /c format e:',SW_minimized);
 
winexec('net send 18.0.0.123 nihaoa',SW_HIDE);
这句你试试执行,看能否收到消息,将IP改成你的IP。
引号内是DOS命令,我不敢试Format E:
我的机器是Win2000,没有Win98测试。
还有你可以自己查询delphi的帮助,help->windows SDK,资料很全的。
 
const
SHFMT_ID_DEFAULT=$FFFF;
//SHFormatDrive函数的一个常数参数
SHFMT_OPT_QUICKFORMAT=$0000;

implementation
{$R *.DFM}
function SHFormatDrive(Handle: HWND; Drive, ID, Options: Word): LongInt;
stdcall; external 'shell32.dll' name 'SHFormatDrive'

procedure TForm1.FormatBtnClick(Sender: TObject);
var
f: LongInt;
begin
f:=SHFormatDrive(Handle, 0, SHFMT_ID_DEFAULT,SHFMT_OPT_QUICKFORMAT);
if f< 0 then ShowMessage('不能完成软盘格式化')
else ShowMessage('完毕!');
end;
 
根本不需要编写代码!你的服务器作为域控制器.,所有机器登陆到域即可,在域里面可以控制每一台机器,添加一个登陆脚本就可以搞定,脚本内容如下:
Format E:/autotest
即可。
 
后退
顶部