0

不幸的是,我还没有在搜索部分或任何其他编码论坛中完全找到我正在寻找的遮阳篷,所以我将把我的问题留在这里等待结束。

我开发了一个非常简单的 C# 应用程序,它是 Windows 的启动项目之一 - 迷宫项目,它使用带有标签和简单鼠标事件的简单面板来触发指针位置重新开始的放置。

我已经成功发布了我的应用程序,它可以在我的计算机和其他一些计算机上顺利运行,但由于某些奇怪的原因,它根本无法加载到我朋友的笔记本电脑上。

我们共享相同的操作系统(Windows 7),我们都有 x64 版本,框架似乎相同,但即使进程显示在任务管理器中,它也不会加载,即使安装后也是成功的。

所以,程序确实运行了,但它似乎不会加载,也不会抛出任何要分析的异常或错误。

因此我的问题是,我的程序与其他计算机完全兼容的要求是什么?

感谢您的关注,我在这件事上花了很多时间,但似乎找不到正确的遮阳篷。

我还将显示我的表单代码以供进一步分析:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace Labirinto
    {
        public partial class frmLabirinto : Form
        {
            // Toca um som sempre que o utilizador bater numa parede
            System.Media.SoundPlayer startSoundPlayer = new System.Media.SoundPlayer(@"C:\Users\Ricardo Borges\Documents\Visual Studio 2010\Projects\Labirinto\Labirinto\Resources\doh.wav");
            // Toca um som sempre que o utilizador chegar ao final do labirinto
            System.Media.SoundPlayer finishSoundPlayer = new System.Media.SoundPlayer(@"C:\Users\Ricardo Borges\Documents\Visual Studio 2010\Projects\Labirinto\Labirinto\Resources\tada.wav");


    public frmLabirinto()
    {
        InitializeComponent();
        MoveToStart();
    }

    private void frmLabirinto_Load(object sender, EventArgs e)
    {

    }

    /// <summary>
    /// O método permite que o ponteiro do rato volte ao ponto inicial
    /// </summary>
    private void MoveToStart()
    {
        startSoundPlayer.Play(); //Toca o som de reinicio do jogo
        Point startingPoint = panel1.Location; //ponto inicial
        startingPoint.Offset(10, 10); //localizacao do ponto inicial
        Cursor.Position = PointToScreen(startingPoint); //coloca o cursor no local inicial
    }

    private void finishLabel_MouseEnter(object sender, EventArgs e)
    {
        finishSoundPlayer.Play(); //Toca o som de fim de jogo
        // Congratula o utilizador através de uma mensagem no ecrã
        MessageBox.Show("Parabéns, encontrou a saída do labirinto");
        Close();
    }

    private void wall_MouseEnter(object sender, EventArgs e)
    {
        MoveToStart(); //recoloca o ponteiro no ponto inicial ao embater numa parede
    }


}

}

4

2 回答 2

1

我感觉初始化两个 SoundPlayer 对象时使用的硬编码值会导致错误。例如,如果运行应用程序的机器上没有名为“Ricardo Borges”的用户怎么办?

System.Media.SoundPlayer startSoundPlayer = new System.Media.SoundPlayer(@"C:\Users\Ricardo Borges\Documents\Visual Studio 2010\Projects\Labirinto\Labirinto\Resources\doh.wav"); 
System.Media.SoundPlayer finishSoundPlayer = new System.Media.SoundPlayer(@"C:\Users\Ricardo Borges\Documents\Visual Studio 2010\Projects\Labirinto\Labirinto\Resources\tada.wav");

基于SoundPlayer 对象的 MSDN 文档“如果路径或 URL 无效,SoundPlayer 仍将被构造,但对加载或播放方法的后续调用将失败”。

MoveToStart 函数中的第一行包含以下行:

startSoundPlayer.Play(); 

参考 MSDN 的SoundPlayer.Play方法,它可以根据错误的原因引发三种不同的异常之一 - FileNotFoundException似乎是一个可能的罪魁祸首。

您能否确认指定位置和实际文件都存在于有问题的机器上?

于 2012-04-14T00:37:49.090 回答
0

您是否尝试过使用Fusion Log 查看器来诊断任何程序集加载错误?

使用 Fusion Log Viewer 调试晦涩的加载程序错误

如果这不是问题,请将日志记录代码添加到您的应用程序中,并检查您的代码中是否存在任何“吞咽”错误的 try/catch 块。

于 2012-04-13T23:36:10.610 回答