我目前有一个程序,使用注册表设置文件关联(注意,它是一个.NET 2.0,所以我必须通过注册表方法).问题是,因为它试图写入HKCR,它可能会遇到管理问题(在其他机器上).是否有更通用的方法来设置文件关联(对于.NET 2.0),例如使用HKCU或其他不需要管理权限的方法.
string keyName = "Class";
string keyValue = "Class File";
string apppath = Application.ExecutablePath.ToLower() + " \"%1\"";
RegistryKey key;
key = Registry.ClassesRoot.CreateSubKey(keyName);
key.SetValue("", keyValue);
RegistryKey iconkey;
key = Registry.ClassesRoot.CreateSubKey(keyName);
iconkey = key.CreateSubKey("DefaultIcon");
iconkey.SetValue("", Environment.CurrentDirectory + "\\resources\\musicfile.ico");
key = key.CreateSubKey("shell");
key = key.CreateSubKey("open");
key = key.CreateSubKey("command");
key.SetValue("", apppath);
Run Code Online (Sandbox Code Playgroud) 我正在研究客户端服务器应用程序,Windows Server和Linux Client.我正在使用多个并发客户端测试我的服务器.我尝试了来自客户端的20个并发连接,我注意到尽管所有20个请求都是相同的,但仍未处理一些请求.他们进入队列,由于某种原因轮到他们客户端关闭(客户端连接超时为5秒).
然后我添加了一个Thread.Sleep(1000),以检查它是否真的是异步但后来我意识到它不会处理其他请求,直到超时.尽管如此
现在我想知道我在这里失踪了什么,因为这主要发生在并发连接上?
public static void StartServer(IPAddress ipAddr, int port)
{
//IPEndPoint serverEndPoint = new IPEndPoint(ipAddr, port);
IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Any, port);
Socket clientListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
clientListener.Bind(serverEndPoint);
clientListener.Listen(500);
Console.WriteLine("-- Server Listening: {0}:{1}",ipAddr,port);
while (true)
{
resetEvent.Reset();
Console.WriteLine("|| Waiting for connection");
clientListener.BeginAccept(new AsyncCallback(AcceptConnection), clientListener);
resetEvent.WaitOne();
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
public static void AcceptConnection(IAsyncResult ar)
{
// Get the socket that handles the client request.
Socket listener …Run Code Online (Sandbox Code Playgroud)