2013-03-22 56 views
1

我试图取消调用它之前卸载安装在我的应用程序上的所有插件。 我正在使用的代码波纹管,但我没有结果...执行第二个应用程序的调试器

for I := 0 to GetArrayLength(PluginsID)-1 do 
begin 
    sUnInstallString := 'Software\Microsoft\Windows\CurrentVersion\Uninstall\' + PluginsID[I]; 
    Exec(sUnInstallString, '/NORESTART','', SW_SHOW, ewWaitUntilTerminated, uResultCode); 
end; 

这有什么错?

EDITED

我更改代码,找到正确的反安装字符串:

for I := 0 to GetArrayLength(Plugins)-1 do 
    begin 
    sUnInstPath := 'Software\Microsoft\Windows\CurrentVersion\Uninstall\' + Plugins[I]; 
    if RegQueryStringValue(HKLM, sUnInstPath, 'UninstallString', sUnInstallString) then 
    begin  
     Exec(sUnInstallString, '','', SW_HIDE, ewWaitUntilTerminated, uResultCode); 
    end; 
    end; 

但它不会再次工作....该sUnInstallString充满了正确的值。

+0

那是因为你正试图执行注册表项。您可能要从该注册表项中查询卸载路径,不是吗? – TLama 2013-03-22 13:58:27

+0

我在一个教程中发现我必须这样做。如果不是这样,我该如何进行卸载? – Victor 2013-03-22 13:59:08

+0

那么是什么返回你'UninstallString'?有没有通往unistaller可执行文件和参数的路径? – TLama 2013-03-22 14:48:21

回答

0

我只是Exec之前添加行

StringChangeEx(sUnInstallString, '"', '', True); 

。该值从注册表卡梅斯与无效字符"

+0

这不是无效的,这是至关重要的。你不应该这样使用它。 – Miral 2013-03-24 01:38:35

0

你exec调用改成这样:

Exec('>', sUnInstallString, ...) 

(不要在此之前剥去引号)

+0

什么意思是用'>'? – Victor 2013-03-25 12:35:38

+0

阅读['Exec']的帮助(http://jrsoftware.org/ishelp/topic_isxfunc_exec.htm)。 – Miral 2013-03-25 19:46:18