在WebService中存取本地文件和调用WMI获取硬盘序列号问题?

Foxer 2006-06-26 01:36:18
http://community.csdn.net/Expert/topic/4843/4843456.xml?temp=.8702204

这方面初次涉入,毫无经验,恳请高手指点!
...全文
207 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Foxer 2006-06-27
  • 打赏
  • 举报
回复
Knight94(愚翁) :
按照你的要求做了,不成,目前还没搞明白。

不过先结了贴
Foxer 2006-06-26
  • 打赏
  • 举报
回复
谢谢Knight94(愚翁)

内容很复杂,明天试一试!
固执的染色体 2006-06-26
  • 打赏
  • 举报
回复
mark
Knight94 2006-06-26
  • 打赏
  • 举报
回复
这是权限问题,第一点,可以参看
http://blog.csdn.net/knight94/archive/2006/03/31/646252.aspx

第二点,如果不需要修改aspnet用户为administrators组中,需要为wmi设置ConnectionOptions
Foxer 2006-06-26
  • 打赏
  • 举报
回复
所谓问题是:

1. 为什么不能取得HD的序列号?
2.怎样才能建立文件和写入文件?
Foxer 2006-06-26
  • 打赏
  • 举报
回复
取硬盘序列号用WMI:
private static String GetHardDiskID()
{
ManagementClass mc = new ManagementClass("Win32_PhysicalMedia");
ManagementObjectCollection moc = mc.GetInstances();
string hardDiskID = "HDSerialNumber";

foreach (ManagementObject mo in moc)
{
if (mo.Properties["SerialNumber"] != null)
{
hardDiskID = mo.Properties["SerialNumber"].Value.ToString();
mo.Dispose();
break;
}
}
File.WriteAllText(“C:\\HD.TXT",hardDiskID);

return hardDiskID;
}

程序中:
1. File.WriteAllText(“C:\\HD.TXT",hardDiskID);
不能向C:\HD.TXT中写入数据,说是没有权限
2. 总是不能取得hardDiskID信息

这些代码在正常的WinForm中能够正常执行。
winner2050 2006-06-26
  • 打赏
  • 举报
回复
using System;
using System.IO;
using System.Web;
using System.Security.Cryptography;
using System.Runtime.InteropServices;
namespace TopWin.Common
{
/// <summary>
/// SystemCode 的摘要说明。
/// </summary>
public class SystemCode
{
[DllImport("kernel32.dll")]
private static extern int GetVolumeInformation
(
string lpRootPathName,
string lpVolumeNameBuffer,
int nVolumeNameSize,
ref int lpVolumeSerialNumber,
int lpMaximumComponentLength,
int lpFileSystemFlags,
string lpFileSystemNameBuffer,
int nFileSystemNameSize
);
public SystemCode()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// C盘序列号
/// </summary>
/// <param name=""></param>
/// <returns></returns>
public static string HDVal()
{
const int MAX_FILENAME_LEN = 256;
int retVal = 0;
int a =0;
int b =0;
string str1 = null;
string str2 = null;
int i = GetVolumeInformation(
"c:\\",
str1,
MAX_FILENAME_LEN,
ref retVal,
a,
b,
str2,
MAX_FILENAME_LEN
);

return retVal.ToString();
}

/// <summary>
/// 对称算法加密
/// </summary>
/// <param name="datastr">要加密的字符串</param>
/// <param name="keystr">加密钥匙串</param>
/// <returns>string</returns>
public static string Encrypt(string datastr, string keystr)
{
if (System.Configuration.ConfigurationSettings.AppSettings["EncryptDbPSW"]=="true")
{
DESCryptoServiceProvider desc = new DESCryptoServiceProvider();//des进行加密
byte[] key = System.Text.Encoding.Unicode.GetBytes(keystr);
byte[] data = System.Text.Encoding.Unicode.GetBytes(datastr);
MemoryStream ms = new MemoryStream();//存储加密后的数据
CryptoStream cs = new CryptoStream(ms, desc.CreateEncryptor(key, key), CryptoStreamMode.Write);
cs.Write(data, 0, data.Length);//进行加密
cs.FlushFinalBlock();
return Convert.ToBase64String(ms.ToArray());//取加密后的数据
}
else{return datastr;}
}
/// <summary>
/// 对称算法解密
/// </summary>
/// <param name="datastr">要解密的字符串</param>
/// <param name="keystr">加密钥匙串</param>
/// <returns>string</returns>

public static string Decrypt(string datastr, string keystr)
{
if (System.Configuration.ConfigurationSettings.AppSettings["EncryptDbPSW"]=="true")
{
System.Security.Cryptography.DESCryptoServiceProvider desc = new System.Security.Cryptography.DESCryptoServiceProvider();
byte[] key = System.Text.Encoding.Unicode.GetBytes(keystr);
byte[] data = Convert.FromBase64String(datastr);
System.IO.MemoryStream ms = new System.IO.MemoryStream();//存储解密后的数据
CryptoStream cs = new CryptoStream(ms, desc.CreateDecryptor(key, key), CryptoStreamMode.Write);
cs.Write(data, 0, data.Length);//解密数据
cs.FlushFinalBlock();
return System.Text.Encoding.Unicode.GetString(ms.ToArray());
}
else{return datastr;}
}

}
}

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧