L765707000 2015-04-06 14:27 采纳率: 0%
浏览 2982

c#小程序换机子不能直接运行.EXE。需重新编译,求解答?

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

namespace getid
{
public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
    }
    private void getid()
    {
        udisk upan = new udisk();
        string[] aa;
        upan.matchDriveLetterWithSerial();
        aa = upan._serialNumber.ToArray();
        try
        {
            textBox1.Text = aa[0];
        }
        catch (Exception e)
        {
            textBox1.Text = "";
            MessageBox.Show("请在电脑U盘识别后启动程序!");
        }
    }
    private void button1_Click(object sender, EventArgs e)
    {
        getid();
    }

}

public class udisk     
{
    public List<string> _serialNumber = new List<string>();

    #region 获取优盘的序列号
    /// <summary>
    /// 调用这个函数将本机所有U盘序列号存储到_serialNumber中
    /// </summary>
    public void matchDriveLetterWithSerial()
    {
        string[] diskArray;
        string driveNumber;
        var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDiskToPartition");
        foreach (ManagementObject dm in searcher.Get())
        {
            getValueInQuotes(dm["Dependent"].ToString());
            diskArray = getValueInQuotes(dm["Antecedent"].ToString()).Split(',');
            driveNumber = diskArray[0].Remove(0, 6).Trim();
            var disks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");
            foreach (ManagementObject disk in disks.Get())
            {
                if (disk["Name"].ToString() == ("\\\\.\\PHYSICALDRIVE" + driveNumber) & disk["InterfaceType"].ToString() == "USB")
                {
                    _serialNumber.Add(parseSerialFromDeviceID(disk["PNPDeviceID"].ToString()));
                }
            }
        }
    }

    private static string parseSerialFromDeviceID(string deviceId)
    {
        var splitDeviceId = deviceId.Split('\\');
        var arrayLen = splitDeviceId.Length - 1;
        var serialArray = splitDeviceId[arrayLen].Split('&');
        var serial = serialArray[0];
        return serial;
    }

    private static string getValueInQuotes(string inValue)
    {
        var posFoundStart = inValue.IndexOf("\"");
        var posFoundEnd = inValue.IndexOf("\"", posFoundStart + 1);
        var parsedValue = inValue.Substring(posFoundStart + 1, (posFoundEnd - posFoundStart) - 1);
        return parsedValue;
    }
    #endregion   
}

}
图片说明

用的是vs2010,当然也用过vs2013。都能在我的win7 64位上运行起来,但是在很多测试机子的一台上运行不起来,该机子是win7 64位的,用的是vs2013版本。
在那台运行不起来的机子上,使用vs2013进行编译,能运行的起来,将debug下的程序放在我的机子上,能运行起来。
提问:这样是什么问题导致的在我的机子上编译放在那台机子上运行不起来?
情况:那台机子只有装vs2013,在程序与功能中没有看到.net的组件,但是却能写c#的程序,建工程的时候却能建.net2.0到.net4.5的所有工程。求大神解答,一个礼拜多了,还是没搞懂。
重申问题:是什么问题导致的在我的机子上编译放在那台机子上运行不起来?

  • 写回答

7条回答 默认 最新

  • threenewbee 2015-04-06 14:42
    关注

    按理说不会,那台机器装.net 4.5了么?有2013应该有4.5。
    怎么运行不起来。什么错误?在程序的program.cs中的main第一行加上messagebox.show(),看看有没有显示。是不是程序运行了,又因为什么错误退出了。

    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog