You would not normally have to reinstall MS DTC on Windows XP because it's files are protected by WFP (Windows File Protection).

If you find a need to reinstall MS DTC, Microsoft has written a Knowledge Base Article, 891801 - How to reinstall Microsoft Distributed Transaction Coordinator on a computer that is running Windows XP.

Unfortunately, the processes that the article describes can take you hours to accomplish.

I have written 3 scripts to allow you to accomplish the required tasks in only a few minutes.

To reinstall MS DTC by using these scripts, perform the following steps:

1. Make sure that all transactions have completed.

2. Open a CMD.EXE window and type MSDTC1 Filename, where Filename is the full path to a file that will be created to restore all services to their current Start value.

3. Shutdown and restart Windows XP.

4. Open a CMD.EXE window and type MSDTC2.

5. When step 4 finishes, and all disk activity stops, type MSDTC3 FileName, where Filename is the full path to the file that you created in step 2.

6. Shutdown and restart Windows XP.

7. Open a CMD.EXE window and type %WINDIR%\System32\msdtc.exe -resetlog.

MSDTC1.bat contains:

@echo off
if \{%1\}<h1><a name="_echo_Syntax_MSDTC1_Filename_amp_goto_EOF_setlocal_ENABLEDELAYEDEXPANSION_set_filename_1_if_exist_filename_del_q_filename_echo_Alerter_echo_EventSystem_echo_Browser_echo_TrkWks_echo_Dnscache_echo_Eventlog_echo_PolicyAgent_echo_dmserver_echo_Messenger_echo_Netlogon_echo_NtLmSsp_echo_Netman_echo_PlugPlay_echo_RpcSs_echo_RpcLocator_echo_NtmsSvc_echo_SamSs_echo_lanmanserver_echo_SENS_echo_Schedule_echo_LmHosts_echo_winmgmt_echo_Wmi_echo_W32Time_echo_lanmanworkstation_gt_TEMP_MSDTC1_TMP_call_stopdtc_gt_nul_2_gt_amp_1_for_f_Tokens_L_in_reg_query_HKLM_System_CurrentControlSet_Services_FINDSTR_I_B_L_C_HKEY_LOCAL_MACHINE_do_set_line_L_set_key_HKLM_LINE_18_call_subkey_key_call_testsvc_endlocal_goto_EOF_stopdtc_sc_stop_msdtc_goto_EOF_testsvc_for_f_Tokens_c_in_echo_svc_findstr_I_B_E_L_G_TEMP_MSDTC1_TMP_do_goto_EOF_set_a_start_3_set_a_type_0_call_getstart_gt_nul_2_gt_amp_1_call_gettype_gt_nul_2_gt_amp_1_if_type_LSS_16_goto_EOF_if_start_NEQ_2_goto_EOF_sc_config_svc_start_demand_echo_sc_config_svc_start_auto_gt_gt_filename_goto_EOF_gettype_for_f_Tokens_2_3_x_in_reg_query_HKLM_System_CurrentControlSet_Services_svc_V_type_FIND_REG_DWORD_do_set_a_type_y_goto_EOF_getstart_for_f_Tokens_2_3_x_in_reg_query_HKLM_System_CurrentControlSet_Services_svc_V_start_FIND_REG_DWORD_do_set_a_start_y_goto_EOF_subkey_set_svc_nx1_pre_font_size_1_b_MSDTC2_bat_b_font_contains_pre_echo_off_setlocal_echo_WINDIR_System32_msdtc_exe_uninstall_WINDIR_System32_msdtc_exe_uninstall_call_delkey_HKCR_CID_call_delkey_HKLM_SYSTEM_CurrentControlSet_Services_MSDTC_call_delkey_HKLM_SYSTEM_ControlSet001_Services_MSDTC_call_delkey_HKLM_SYSTEM_ControlSet002_Services_MSDTC_call_delkey_HKLM_Software_Microsoft_MSDTC_echo_WINDIR_System32_msdtc_exe_install_WINDIR_System32_msdtc_exe_install_endlocal_goto_EOF_delkey_set_key_1_call_delkeyq_key_gt_nul_2_gt_amp_1_echo_goto_EOF_delkeyq_REG_DELETE_key_F_pre_font_size_1_b_MSDTC3_bat_b_font_contains_pre_echo_off_if_1_">\{\} @echo Syntax: MSDTC1 Filename&goto :EOF
setlocal ENABLEDELAYEDEXPANSION
set filename=%1
if exist %filename% del /q %filename%
(
@echo Alerter
@echo EventSystem
@echo Browser
@echo TrkWks
@echo Dnscache
@echo Eventlog
@echo PolicyAgent
@echo dmserver
@echo Messenger
@echo Netlogon
@echo NtLmSsp
@echo Netman
@echo PlugPlay
@echo RpcSs
@echo RpcLocator
@echo NtmsSvc
@echo SamSs
@echo lanmanserver
@echo SENS
@echo Schedule
@echo LmHosts
@echo winmgmt
@echo Wmi
@echo W32Time
@echo lanmanworkstation
)>"%TEMP%\MSDTC1.TMP"
call :stopdtc>nul 2>&1
for /f "Tokens=*" %%L in ('reg query HKLM\System\CurrentControlSet\Services^|FINDSTR /I /B /L /C:"HKEY_LOCAL_MACHINE"') do (
 set line=%%L
 set key=HKLM!LINE:~18!
 call :subkey "!key!"
 call :testsvc
)
endlocal
goto :EOF
:stopdtc
sc stop msdtc
goto :EOF
:testsvc
for /f "Tokens=*" %%c in ('@echo !svc!^|findstr /I /B /E /L /G:"%TEMP%\MSDTC1.TMP"') do goto :EOF
set /a start=3
set /a type=0
call :getstart>nul 2>&1
call :gettype>nul 2>&1
if %type% LSS 16 goto :EOF
if %start% NEQ 2 goto :EOF
sc config !svc! start= demand
@echo sc config !svc! start= auto>>%filename%
goto :EOF
:gettype
for /f "Tokens=2,3" %%x in ('reg query "HKLM\System\CurrentControlSet\Services\!svc!" /V type^|FIND "REG_DWORD"') do (
 set /a type=%%y
)
goto :EOF
:getstart
for /f "Tokens=2,3" %%x in ('reg query "HKLM\System\CurrentControlSet\Services\!svc!" /V start^|FIND "REG_DWORD"') do (
 set /a start=%%y
)
goto :EOF
:subkey
set svc=%~nx1
</a></h1>
MSDTC2.bat contains:
@echo off
setlocal
@echo %WINDIR%\System32\msdtc.exe -uninstall
%WINDIR%\System32\msdtc.exe -uninstall
call :delkey "HKCR\CID"
call :delkey "HKLM\SYSTEM\CurrentControlSet\Services\MSDTC"
call :delkey "HKLM\SYSTEM\ControlSet001\Services\MSDTC"
call :delkey "HKLM\SYSTEM\ControlSet002\Services\MSDTC"
call :delkey "HKLM\Software\Microsoft\MSDTC"
@echo %WINDIR%\System32\msdtc.exe -install
%WINDIR%\System32\msdtc.exe -install
endlocal
goto :EOF
:delkey
set key=%1
call :delkeyq %key% >nul 2>&1
@echo.
goto :EOF
:delkeyq
REG DELETE %key% /F
MSDTC3.bat contains:
@echo off
if \{%1\}\{\} @echo Syntax: MSDTC3 Filename&goto :EOF
if not exist %1 Syntax: MSDTC3 Filename - %1 was NOT found.&goto :EOF
setlocal
set filename=%1
for /f "Tokens=*" %%r in ('type %filename%') do (
 %%r
)
reg add "HKLM\SOFTWARE\Microsoft\MSDTC\XADLL" /F
regsvr32 mtxoci.dll
endlocal