怎样Win2000下实现文件安装共享冲突时的重起更新操作????(100分)

C

cnwinds

Unregistered / Unconfirmed
GUEST, unregistred user!
在安装软件的时候,如果出现某些文件无法更新的情况,就会提示需要重新启动系统,然后
系统在启动的过程就会自动更新文件。

如果我要升级一些应用程序的文件,我应该如何在Win2000下实现这个功能?????
 
有没有人能回答这个问题呀?
 
在WIN目录下生成WININIT.INI就可以了。需要知道如果操作INI文件。
内容如下:(文件名可带路径)
[rename]
;删除文件
NUL=OldFileToDelete
;文件改名
FileNewName=FileOldName
...
通常做法是:
先把新版文件改个扩展名,复制到旧版文件目录下,生成WININIT.INI,
重启后WINDOWS如果发现有WININIT.INI,则自动会解释执行WININIT.INI,
而且执行完后会把它删除。类似于注册表中的RUNONCE。
一般在WIN目录下是找不到这个文件的,因为启动后就被系统删除了。

举个例子,假如我们想更新 my.dll。
可以把新版my.dll改名my.dl~,复制到旧版my.dll的目录里。
生成WININIT.INI:
[rename]
nul=my.dll
my.dll=my.dl~

重启搞定!
明白了吧?分拿来
 
hehe, 不好意思我在2000下试过了,不行,相同的方法只在98中有用!
 
是填一个注册表项, 具体哪个忘了, 得查查
 
快帮我查查,谢谢了,有用的话我把分都给你
 
2000下是不好办。你可以试试下面的方法。
找一个需要重启更新系统文件的软件,在安装它之前
运行一个注册表监控软件,装完之后看看它修改了哪些注册表项,或许会有所启示。
 
终于找到了

在Win9x下面可以利用Wininit.ini文件来替换文件,那么在NT/2000/XP下如何做呢?
可以利用MoveFileEx() API来做,记住:必须用MOVEFILE_DELAY_UNTIL_REBOOT标志。

<> MoveFileEx <>
这个函数允许我们对一个指定的文件或目录改名。但是如果我们在dwFlags中指定为TMOVEFILE_DELAY_UNTIL_REBOOT(仅对NT/2000有效),那么这次更动会在重启之后生效,系统会在重启之后删除或改改我们指定的文件。

用法:
MoveFileEx(ExistingFN, NewFN, MOVEFILE_REPLACE_EXISTING)
MoveFileEx(ExistingFN, NewFN, MOVEFILE_DELAY_UNTIL_REBOOT)

其中:
ExistingFN 为指定的文件或目录的路径。
NewFN 为新的文件或目录名。

标志 MOVEFILE_REPLACE_EXISTING 告诉函数如果文件或目录存在则改写它的名称。
如果 NewFN 设为 nil,那么则将其删除

例子:

移动文件:
MoveFileEx('c:/winnt/system32/kernel32.dll', 'd:/winnt.bak/system32/kernel32.dll',MOVEFILE_REPLACE_EXISTING);
MoveFileEx('c:/winnt/system32/kernel32.dll', 'd:/winnt.bak/system32/kernel32.dll',MOVEFILE_DELAY_UNTIL_REBOOT);

删除文件:
MoveFileEx('c:winnt/system32/kernel32.dll', nil,MOVEFILE_REPLACE_EXISTING);
MoveFileEx('c:winnt/system32/kernel32.dll', nil,MOVEFILE_DELAY_UNTIL_REBOOT);


呜呜,可惜分不能给我自己 :(
 
顶部