Page 2 of 2

Re: Cease fire on LAN

Posted: 07 Apr 2024, 12:40
by Traumwelt
First the error message GameHelper.dll appears, then Exception error.

The settings cannot be saved, when I restart the Lauchner, the hooks are there again.

Every time I start the 1.5 launcher, the administrator window also appears.
00.jpg
00.jpg (102.37 KiB) Viewed 928 times
Edit:
I will try again later with moving the DirectX file...

Re: Cease fire on LAN

Posted: 08 Apr 2024, 11:11
by Dr.MonaLisa
It looks like the Launcher is trying to generate some files, and it asks for the administration permissions to be able to write in the game folder. Do you actually type the admin password there, or refuse it?

Re: Cease fire on LAN

Posted: 08 Apr 2024, 18:41
by Traumwelt
I press "Current user" without admin password...
This is just an example picture from the internet ;)

Re: Cease fire on LAN

Posted: 08 Apr 2024, 23:29
by Dr.MonaLisa
On Windows XP you're supposed to start the launcher with administrative permissions the first time after installation. So if you haven't done that, it's required to do.

Have you tried with moving out DLL or disabling Directx 9 in Up1.5 Settings?

Re: Cease fire on LAN

Posted: 10 Apr 2024, 02:44
by Traumwelt
I have tried everything possible, no chance to get the game running with the patch.
I think it's because of the GOG version.
I will buy an original CD / DVD version and test it then.

Re: Cease fire on LAN

Posted: 10 Apr 2024, 18:29
by Dr.MonaLisa
I don't think it makes any difference which version it is though... WinXP has always acted weirdly, but if you made a test on a clean windows xp installation in the virtual machine - it would probably work.

Re: Cease fire on LAN

Posted: 11 Apr 2024, 06:56
by Dr.MonaLisa
So probably this function fails:

Code: Select all

std::wstring GetProcessPathByPIDWs(DWORD PID)
{
	ErrorCode14J_FailureStep = 5;
	wstring ProcessPathToReturn = L"";
	HANDLE Handle = OpenProcess(
		PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
		FALSE,
		PID /* This is the PID, you can find one from windows task manager */
	);
	if (Handle)
	{
		ErrorCode14J_FailureStep = 6;
		wchar_t Buffer[MAX_PATH];

		//Fucking Winddows XP
		HANDLE  hReturnHandle = NULL;
		HMODULE hNtDllModule = NULL;

		typedef DWORD(WINAPI* MonaGetModuleFileNameExW)(
			HANDLE  hProcess,
			HMODULE hModule,
			LPWSTR  lpFilename,
			DWORD   nSize
			);
		MonaGetModuleFileNameExW funcGetModuleFileNameExW = NULL;
		bool LoadedK32GetModuleFileNameExW = false;
		if((hNtDllModule = GetModuleHandleW(L"kernel32.dll"))) {
			ErrorCode14J_FailureStep = 7;
			if (funcGetModuleFileNameExW = (MonaGetModuleFileNameExW)GetProcAddress(hNtDllModule, "K32GetModuleFileNameExW")) {
				LoadedK32GetModuleFileNameExW = true;
				ErrorCode14J_FailureStep = 8;
			}
		}
		if (!LoadedK32GetModuleFileNameExW) {
			ErrorCode14J_FailureStep = 9;
			if ((hNtDllModule = GetModuleHandleW(L"Psapi.dll"))) {
				ErrorCode14J_FailureStep = 10;
				if (funcGetModuleFileNameExW = (MonaGetModuleFileNameExW)GetProcAddress(hNtDllModule, "GetModuleFileNameExW")) {
					LoadedK32GetModuleFileNameExW = true;
					ErrorCode14J_FailureStep = 11;
				}
			}
		}

		if (LoadedK32GetModuleFileNameExW) {
			ErrorCode14J_FailureStep = 12;
			if (funcGetModuleFileNameExW(Handle, 0, Buffer, MAX_PATH))
			//if (GetModuleFileNameExW(Handle, 0, Buffer, MAX_PATH))
			{
				ErrorCode14J_FailureStep = 13;
				// At this point, buffer contains the full path to the executable
				ProcessPathToReturn = Buffer;

			}
			else
			{
				ErrorCode14J_FailureStep = 14;
				// You better call GetLastError() here
			}
		}
		CloseHandle(Handle);
	}
	return ProcessPathToReturn;
}
It seems like in your Windows XP, there's a problem using "GetModuleFileNameExW" function from Psapi.dll. Quite strange because all functions were designed especially to work for new Windows versions, and the XP (before finally decided to drop the support).