All pastes #149423 Raw Edit

Something

public text v1 · immutable
#149423 ·published 2006-08-25 19:56 UTC
rendered paste body
public class Launcher
    {
        [DllImport( "uog.dll", EntryPoint = "UOG_Launch", ExactSpelling = true, CallingConvention = CallingConvention.StdCall )]
        public static extern bool UOG_Launch( int client );

        [DllImport( "uog.dll", EntryPoint = "UOG_Client_Launch", ExactSpelling = true, CallingConvention = CallingConvention.StdCall )]
        public static extern bool UOG_Client_Launch( string clientPath );

        [DllImport( "uog.dll", EntryPoint = "UOG_Client_Terminate", ExactSpelling = true, CallingConvention = CallingConvention.StdCall )]
        public static extern bool UOG_Client_Terminate();

        [DllImport( "uog.dll", EntryPoint = "UOG_Client_Patch", ExactSpelling = true, CallingConvention = CallingConvention.StdCall )]
        public static extern bool UOG_Client_Patch();

        [DllImport( "uog.dll", EntryPoint = "UOG_Client_Resume", ExactSpelling = true, CallingConvention = CallingConvention.StdCall )]
        public static extern bool UOG_Client_Resume();

        public static void Launch()
        {
            string path = GetExePath( "Ultima Online" );
            Directory.SetCurrentDirectory( path );
            LaunchDecryptedClient( "client.exe" );
        }

        private static string GetExePath( string subName )
        {
            try
            {
                using( RegistryKey key = Registry.LocalMachine.OpenSubKey( String.Format( @"SOFTWARE\Origin Worlds Online\{0}\1.0", subName ) ) )
                {
                    if( key == null )
                        return null;

                    string v = key.GetValue( "ExePath" ) as string;

                    if( v == null || v.Length <= 0 )
                        return null;

                    if( !File.Exists( v ) )
                        return null;

                    v = Path.GetDirectoryName( v );

                    if( v == null )
                        return null;

                    return v;
                }
            }
            catch
            {
                return null;
            }
        }

        public static void LaunchDecryptedClient( string path )
        {
            if( !UOG_Client_Launch( path ) )
                throw new ApplicationException( "UOG_Client_Launch error" );

            if( !UOG_Client_Patch() )
            {
                UOG_Client_Terminate();
                throw new ApplicationException( "UOG_Client_Patch error" );
            }

            if( !UOG_Client_Resume() )
            {
                UOG_Client_Terminate();
                throw new ApplicationException( "UOG_Client_Resume error" );
            }
        }
    }