访问同一域上的计算机并自动更新软件?

时间:2013-06-24 13:41:49

标签: winforms

我在.net中构建了一个Windows应用程序,并通过设置和部署项目在客户端机器上安装了该应用程序。该软件安装在大约15台位于同一域的计算机上。我们会根据客户建议不断添加新功能。问题是我每次更新软件时都必须在所有机器上重新安装软件。

我正在寻找上述问题的解决方案,比如我在普通机器上放置更新版本,并在所有机器上从常用位置更新设置。我在应用程序配置文件中存储了版本号,每次更新版本时我都会将版本增加1个数字。我想在数据库中创建新表,它将具有最新版本号。在数据库中更改版本时,将执行.exe,它将从普通计算机更新所有计算机上的软件。

我该怎么做?如果有人有更好的方法,请告诉我。

仅供参考:我已经检查过一次点击但它不符合我的要求,因为它仅为一个用户更新软件,我必须为所有用户更新软件。

由于

1 个答案:

答案 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();

            }

        }

    }