如何替换正在运行的程序里的文件(要求不关闭和重启程序)

如何替换正在运行的程序里的文件(要求不关闭和重启程序),第1张

和删除自身的一个模式,都是先把自己在内存中的handle 给exitprocess然后再delete或者 move掉。

具体的函数是不是movefileA,我还不是很确定。

希望对你有用。

procedure movefile;

var hModule: THandle;

szModuleName: array[0MAX_PATH] of char;

hKrnl32: THandle;

pExitProcess, pmovefile, pFreeLibrary, pUnmapViewOfFile: pointer;

ExitCode: UINT;

begin

hModule := GetModuleHandle(nil);

GetModuleFileName(hModule, szModuleName, sizeof(szModuleName));

hKrnl32 := GetModuleHandle('kernel32');

pExitProcess := GetProcAddress(hKrnl32, 'ExitProcess');

pmovefile := GetProcAddress(hKrnl32, 'movefilea');

pFreeLibrary := GetProcAddress(hKrnl32, 'FreeLibrary');

pUnmapViewOfFile := GetProcAddress(hKrnl32, 'UnmapViewOfFile');

ExitCode := systemExitCode;

if ($80000000 and GetVersion()) <> 0 then

// Win95, 98, Me

asm

lea eax, szModuleName

push ExitCode

push 0

push eax

push pExitProcess

push hModule

push pmovefile

push pFreeLibrary

ret

end

else

begin

CloseHandle(THANDLE(4));

asm

lea eax, szModuleName

push ExitCode

push 0

push eax

push pExitProcess

push hModule

push pmovefile

push pUnmapViewOfFile

ret

end

end

end;

#include<stdioh>

#include<stringh>

void main(){

int i;

char str[100]="We will rock you";

printf("去掉空格,然后小写转大写:");

for(i=0;i<strlen(str);i++){

if((int)str[i]>=97&&(int)str[i]<=122){

str[i] = (char)((int)str[i]-32); //注意小写字母的ASCII码是在97-122之间,而大写字母的ASCII码是在65-90之间,对应的字母相差32

}

if((int)str[i]!=32){ //空格的ASCII码是32,去掉空格,肯定是不输出空格

printf("%c",str[i]);

}

}

printf("\n");

printf("保留空格,然后小写转大写:");

for(i=0;i<strlen(str);i++){

if((int)str[i]>=97&&(int)str[i]<=122){

str[i] = (char)((int)str[i]-32);

}

printf("%c",str[i]); //转成大写字母后 ,原样输出(字母是大写但是带空格的)

}

printf("\n");

}

以上就是关于如何替换正在运行的程序里的文件(要求不关闭和重启程序)全部的内容,包括:如何替换正在运行的程序里的文件(要求不关闭和重启程序)、c语言中,如何实现程序替换功能、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9637065.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存