Проблема с реестром - PullRequest
1 голос
/ 17 мая 2010

Я сделал лаунчер для своего игрового сервера. (Мир Warcraft) Я хочу получить путь установки игры, просматриваемый пользователем. Я использую этот код для просмотра и получения installpath, затем устанавливаю некоторые другие строки из строки installpath, а затем просто перемещаюсь по моему ключу реестра.

using System;
using System.Drawing;
using System.Reflection;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using Microsoft.Win32;
using System.IO;
using System.Net.NetworkInformation;
using System.Diagnostics;
using System.Runtime;
using System.Runtime.InteropServices;
using System.Security;
using System.Security.Cryptography;
using System.Text;
using System.Net;
using System.Linq;
using System.Net.Sockets;
using System.Collections.Generic;
using System.Threading;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        string InstallPath, WoWExe, PatchPath;
        private void Form1_Load(object sender, EventArgs e)
        {

            RegistryKey LocalMachineKey_Existence;
            MessageBox.Show("Browse your install location.", "Select Wow.exe");
            OpenFileDialog BrowseInstallPath = new OpenFileDialog();
            BrowseInstallPath.Filter = "wow.exe|*.exe";
            if (BrowseInstallPath.ShowDialog() == DialogResult.OK)
            {
                InstallPath = System.IO.Path.GetDirectoryName(BrowseInstallPath.FileName);
                WoWExe = InstallPath + "\\wow.exe";
                PatchPath = InstallPath + "\\Data\\";

                LocalMachineKey_Existence = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\ExistenceWoW");
                LocalMachineKey_Existence.SetValue("InstallPathLocation", InstallPath);
                LocalMachineKey_Existence.SetValue("PatchPathLocation", PatchPath);
                LocalMachineKey_Existence.SetValue("WoWExeLocation", WoWExe);
            }
        }
    }
}

Проблема в следующем: На некоторых компьютерах он не хранится так, как должно быть. Например, ваш wow.exe находится в C: \ ASD \ wow.exe, вы выбираете его с помощью окон обзора, затем программа должна сохранить его в разделе реестра Exsence как C: \ ASD \ Data \, но он сохраняется следующим образом : C: \ ASDData, поэтому он забывает обратную косую черту: S

Посмотрите на эту картинку:

http://img21.imageshack.us/img21/2829/regedita.jpg

Моя программа отлично работает на моем ПК и на компьютере моих друзей, но на некоторых компьютерах появляется эта "ошибка": S У меня windows 7, с .NEt 3.5 Пожалуйста, помогите мне.

1 Ответ

1 голос
/ 17 мая 2010

Можете ли вы отладить и посмотреть, что содержит InstallPath?

Попробуйте использовать Path.Combine вместо конкатенации строк, например ::1003

WowExe = Path.Combine(InstallPath, "wow.exe");
PatchPath = Path.Combine(InstallPath, @"\Data\");
...