我在.net中构建了一个Windows应用程序,并通过设置和部署项目在客户端机器上安装了该应用程序。该软件安装在大约15台位于同一域的计算机上。我们会根据客户建议不断添加新功能。问题是我每次更新软件时都必须在所有机器上重新安装软件。
我正在寻找上述问题的解决方案,比如我在普通机器上放置更新版本,并在所有机器上从常用位置更新设置。我在应用程序配置文件中存储了版本号,每次更新版本时我都会将版本增加1个数字。我想在数据库中创建新表,它将具有最新版本号。在数据库中更改版本时,将执行.exe,它将从普通计算机更新所有计算机上的软件。
我该怎么做?如果有人有更好的方法,请告诉我。
仅供参考:我已经检查过一次点击但它不符合我的要求,因为它仅为一个用户更新软件,我必须为所有用户更新软件。
由于
答案 0 :(得分:0)
使用按钮创建一个简单的表单,在click事件中,您可以尝试以下代码。 您可以使用此技术更新与要更新的软件相关的任何文件。
[DllImport("advapi32.DLL", SetLastError = true)]
public static extern int LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
private void button1_Click(object sender, EventArgs e)
{
IntPtr admin_token = default(IntPtr);
WindowsIdentity wid_current = WindowsIdentity.GetCurrent();
WindowsIdentity wid_admin = null;
WindowsImpersonationContext wic = null;
try
{
if (LogonUser("username", "domain", "password", 9, 0, ref admin_token) != 0)
{
wid_admin = new WindowsIdentity(admin_token);
wic = wid_admin.Impersonate();
System.IO.File.Copy("D:\\test.txt", "\\\\\\192.168.25.40\\c$\\D:\\test.txt", true);
MessageBox.Show("Copy succeeded");
}
else
{
MessageBox.Show("Copy Failed");
}
}
catch (System.Exception se)
{
int ret = Marshal.GetLastWin32Error();
MessageBox.Show(ret.ToString(), "Error code: " + ret.ToString());
MessageBox.Show(se.Message);
}
finally
{
if (wic != null)
{
wic.Undo();
}
}
}