Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小demo mysql循环插入数据、生成随机数及CONCAT函数 .NET记录-获取外网IP以及判断该IP是属于网通还是电信 Guid的生成和数据修整(去除空格和小写字符)
Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer
Advanced Installer :Free for 30 days. All features.
下载地址:https://www.advancedinstaller.com/download.html
30天内免费
汉化版:http://www.jb51.net/softs/595612.html
选择Visual Studio应用,点击创建项目
可以输入应用名称和所在组织的名称,在安装制作的exe,安装界面会显示所在组织名称
保存后缀aip的文件会以输入的应用名默认保存,例如我设定的输入应用名称是123,保存的文件是123.aip,当然自己可以修改文件保存位置和名字。
这一步可以随便选,在构建的时候修改。
我保存在了ConsoleApp1项目所在的目录,下一步保存需要导入的解决方案
点击下一步会自动加载
加载完成后跳转下面的页面,选择需要导入的项目,一般选Release,前提是已经配置Release并编译
点击之后会自动检测安装包需要的dll文件,全部勾选
可以重命名快捷方式,我这里没有选择重命名
下一步,可选安装后启动应用程序,我这里选择了按下完成按钮时可选启动


可选多种主题
可选构建语言,当然首选中文简体,可多选
不停下一步,最后点击完成,会打开构建页面,在产品细节中,可修改名称、版本、发布者(对应一开始填写的所在组织名称),可以添加控制面板图标
点击构建,如果想要打包所有文件进一个exe文件,选择单个EXE安装,可以自定义EXE图标,修改输出的exe名称,不填写默认是应用名称。
将Framework打包进exe文件,选择运行环境,勾选对应的.NET Framework的版本。点击是会自动下载,点击否,不会将.NET Framework打包进exe,而是选择的在线地址,点击构建后的exe,检查当前环境,如果没有该环境,会选择在线地址下载之后安装,这样的话,并不能满足不联网环境安装条件。右键点击程序包,可以选择新建包的运行环境,安装该程序需要的驱动文件,默认设置就行。
点击左上角的项目,选择构建,自动打包EXE
也可以点击运行,查看安装效果
简单明了的Advanced Installer,快用起来。
关于Newtonsoft.Json,LINQ to JSON的一个小demo
nuget获取Newtonsoft.Json
github地址:Newtonsoft.Json
public static void Test1()
{
/* 文本格式如下 代码实现目的:
1、VR 对象中是否包含ProjectId
2、取ProjectId下的值
{
"VR": {
"ProjectId": {
"txt_s": "工程项目的名称编号Id",
"value": "01"
},
"ProjectObject": {
"ProjectTypeName": {
"name": "12企业类别1",
"txt_s": "企业类别名称"
},
"txt_s": "企业类别对象"
},
"ProjectTitle": {
"txt_s": "工程项目的名称(Title信息)",
"value": "01"
},
"UserId": {
"txt_s": "用户的Id",
"value": "01"
}
}
}
*/
var str = @"%7b+%22VR%22%3a+%7b%22ProjectId%22%3a+%7b%22txt_s%22%3a+%22%e5%b7%a5%e7%a8%8b%e9%a1%b9%e7%9b%ae%e7%9a%84%e5%90%8d%e7%a7%b0%e7%bc%96%e5%8f%b7Id%22%2c+%22value%22%3a+%2201%22+%7d%2c+%22ProjectObject%22%3a+%7b%22ProjectTypeName%22%3a+%7b%22name%22%3a+%2212%e4%bc%81%e4%b8%9a%e7%b1%bb%e5%88%ab1%22%2c+%22txt_s%22%3a+%22%e4%bc%81%e4%b8%9a%e7%b1%bb%e5%88%ab%e5%90%8d%e7%a7%b0%22+%7d%2c+%22txt_s%22%3a+%22%e4%bc%81%e4%b8%9a%e7%b1%bb%e5%88%ab%e5%af%b9%e8%b1%a1%22+%7d%2c+%22ProjectTitle%22%3a+%7b%22txt_s%22%3a+%22%e5%b7%a5%e7%a8%8b%e9%a1%b9%e7%9b%ae%e7%9a%84%e5%90%8d%e7%a7%b0(Title%e4%bf%a1%e6%81%af)%22%2c+%22value%22%3a+%2201%22+%7d%2c+%22UserId%22%3a+%7b%22txt_s%22%3a+%22%e7%94%a8%e6%88%b7%e7%9a%84Id%22%2c+%22value%22%3a+%2201%22+%7d+%7d%7d";
//上述文本是编码之后的,方便调试
str = HttpUtility.UrlDecode(str, Encoding.UTF8);
var jobject = JObject.Parse(str);
var projectId = jobject.SelectToken("VR.ProjectId");
//VR 对象中是否包含ProjectId
if (!projectId.HasValues)
{
//不包含
}
else
{
foreach (var temp in projectId.Children())
{
if (temp.Path.EndsWith("txt_s"))
{
var a = temp.ToObject<string>();
//a 的值是 工程项目的名称编号Id
}
if (temp.Path.EndsWith("value"))
{
var a = temp.ToObject<string>();
//a 的值是 01
}
}
}
}
mysql循环插入数据、生成随机数及CONCAT函数
实现目标:一年12个月,每个月插入一条数据,score为1-5的随机数
循环语句: WHILE …… DO …… END WHILE
DELIMITER ;
CREATE PROCEDURE test_insert()
BEGIN
DECLARE y TINYINT DEFAULT 1;
WHILE y<13
DO
INSERT INTO app_sign(`user_id`, `score`, `createdate`)
VALUES ('1', FLOOR( 1 + RAND() * 5), CONCAT('2018-',CAST(y AS CHAR),'-07') );
SET y=y+1;
END WHILE ;
COMMIT;
END;
CALL test_insert();
DROP PROCEDURE IF EXISTS test_insert;
循环语句: REPEAT …… UNTIL …… END REPEAT
DELIMITER ;
CREATE PROCEDURE test_insert()
BEGIN
DECLARE y TINYINT DEFAULT 1;
REPEAT
INSERT INTO app_sign(`user_id`, `score`, `createdate`)
VALUES ('1', FLOOR( 1 + RAND() * 5), CONCAT('2018-',CAST(y AS CHAR),'-07') );
SET y=y+1;
UNTIL y >= 12
END REPEAT;
COMMIT;
END;
CALL test_insert();
DROP PROCEDURE IF EXISTS test_insert;
循环语句: LOOP……END LOOP
DELIMITER ;
CREATE PROCEDURE test_insert()
BEGIN
DECLARE y TINYINT DEFAULT 1;
lp:LOOP
INSERT INTO app_sign(`user_id`, `score`, `createdate`)
VALUES ('1', FLOOR( 1 + RAND() * 5), CONCAT('2018-',CAST(y AS CHAR),'-07') );
SET y=y+1;
IF y > 12 THEN
LEAVE lp;
END IF;
END LOOP;
COMMIT;
END;
CALL test_insert();
DROP PROCEDURE IF EXISTS test_insert;
生成随机数
生成0-5的随机数
SELECT RAND() * 5
最大不会超过5,SELECT FLOOR(RAND() * 5)生成整数的值是0,1,2,3,4。
生成的随机整数是1,2,3,4,5的话,语句如下SELECT FLOOR(1 + RAND()*5)
CONCAT拼接字符串
CONCAT(str1,str2,…)
返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。
.NET记录-获取外网IP以及判断该IP是属于网通还是电信
在工作时,需要获取服务器公网IP(外网IP),并且判断该IP地址是属于网通还是电信。花时间整理一下,自己实现的代码,以及后续遇到的问题。
/// <summary>
/// 获取外网IP
/// </summary>
/// <returns>IP</returns>
public static string GetOuterIP()
{
string IP = string.Empty;
Uri uri = new Uri("http://www.ip138.com/ips138.asp");
System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(uri);
req.Method = "get";
using (System.IO.Stream s = req.GetResponse().GetResponseStream())
{
using (System.IO.StreamReader reader = new System.IO.StreamReader(s))
{
char[] ch = { '[', ']' };
string str = reader.ReadToEnd();
System.Text.RegularExpressions.Match m = System.Text.RegularExpressions.Regex.Match(str, @"\[(?<IP>[0-9\.]*)\]");
IP= m.Value.Trim(ch);
}
}
return IP;
}
/// <summary>
/// 判断ip是电信还是网通,网通为0,电信为1
/// </summary>
/// <returns></returns>
public static string GetLocation()
{
string location = "0";
try
{
Uri uri = new Uri("http://www.ip138.com/ips138.asp");
System.Net.HttpWebRequest req = System.Net.WebRequest.Create(uri) as System.Net.HttpWebRequest;
if (req != null)
{
req.Method = "get";
using (System.IO.Stream s = req.GetResponse().GetResponseStream())
{
using (System.IO.StreamReader reader = new System.IO.StreamReader(s, Encoding.GetEncoding("gb2312")))
{
string str = reader.ReadToEnd();
if (str.Contains("电信"))
{
location = "1";
}
}
}
}
}
catch
{
location = "0";
}
return location;
}
因为加班太多,工作任务紧张,所以欠考虑,没有在获取数据之后自己存储,后面遇到502,导致网站异常。
- 因为获取的外网IP和方位都依赖于外部网站,所以需要考虑,当访问量过大时,ip138为防止服务器瘫痪,将会禁止访问。
- 建议获取外网IP和方位之后,将外网IP和方位存储,可借助数据库、Redis、MemCache,甚至在服务器写入txt文件,来存储获取的外网IP和方位。
Guid的生成和数据修整(去除空格和小写字符)
SqlServer实现
- SELECT LOWER(LTRIM(RTRIM(REPLACE(NEWID(),'-',''))))
NEWID()函数产生随机数,例如:F874153F-D99B-40A9-826B-D51948A33E22
- REPLACE(NEWID(),'-','')
去除横线
- LOWER()
字母小写
C#代码实现
- string guid = System.Guid.NewGuid().ToString("N").ToLower();
//
// 摘要:
// 根据所提供的格式说明符,返回此 System.Guid 实例值的字符串表示形式。
//
// 参数:
// format:
// 一个单格式说明符,它指示如何格式化此 System.Guid 的值。format 参数可以是“N”、“D”、“B”、“P”或“X”。如果 format 为
// null 或空字符串 (""),则使用“D”。
//
// 返回结果:
// 此 System.Guid 的值的字符串表示形式。
//
// 异常:
// T:System.FormatException:
// format 的值不为 null、空字符串 ("")、"N"、"D"、"B"、"P" 或 "X"。
public string ToString(string format);
Guid的带参数的ToString()方法的注释如上所示
结果示例
1、Guid.NewGuid().ToString("N") : bf8b9c642ea5426f82499bb60681671b
2、Guid.NewGuid().ToString("D") : 17e316f4-3f5b-46a0-ad68-58abb816a969
3、Guid.NewGuid().ToString("B") : {903c1236-fe24-43c2-b9b5-bec35d9a43a8}
4、Guid.NewGuid().ToString("P") : (bc13ad52-1c78-466f-893d-3a65c0b1a4d4)
5、Guid.NewGuid().ToString("X"): {0x3b9638cd,0xc271,0x4dbe,{0xa6,0xac,0x78,0xa5,0x8b,0x5d,0x1f,0x87}}
注:format参数不区分大小写
判断本机ip是电信还是网通
- string location = "0";//0是网通 1是电信
- Uri uri = new Uri("http://www.ip138.com/ips138.asp");
- System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(uri);
- req.Method = "get";
- using (System.IO.Stream s = req.GetResponse().GetResponseStream())
- {
- using (System.IO.StreamReader reader = new System.IO.StreamReader(s,Encoding.GetEncoding("gb2312")))
- {
- string str = reader.ReadToEnd();
- if (str.Contains("电信"))
- {
- location = "1";
- }
- }
- }
Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小demo mysql循环插入数据、生成随机数及CONCAT函数 .NET记录-获取外网IP以及判断该IP是属于网通还是电信 Guid的生成和数据修整(去除空格和小写字符)的更多相关文章
- Visual Studio 2017 - Windows应用程序打包成exe文件(1)- 工具简单总结
最近有对一个Windows应用程序少许维护和修改.修改之后要发布新的exe安装文件,打包exe文件时,遇到了很头疼的问题,还好最后解决了,记录一下. Visual Studio版本:Visual St ...
- Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer
Advanced Installer :Free for 30 days. All features. 下载地址:https://www.advancedinstaller.com/download. ...
- python + pyinstaller 实现将python程序打包成exe文件直接运行
pyinstaller 我们在平常学习使用python的时候经常会自己编写一些小程序来使用,虽然python是跨平台的语言,但是如果我们想要在一个没有python以及很多库环境的电脑上使用我们的小程序 ...
- 如何将 Python 程序打包成 .exe 文件?
有不少订阅本公众号的朋友都不是玩 Python,甚至都不是计算机相关专业的,当我给他们一个 Python 程序时,他们是完全不知道该怎么运行的. 于是我想是不是可以将我的程序打包成可执行文件,直接运行 ...
- 将 Python 程序打包成 .exe 文件
1.简介 做了一个excel的风控模板,里面含有宏,我用python的第三方xlwings部署到linux后发现,linux环境并不支持xlwings. Python 程序都是脚本的方式,一般是在解析 ...
- JAVA程序打包成exe文件详细图解
我们都知道Java可以将二进制程序打包成可执行jar文件,双击这个jar和双击exe效果是一样一样的,但感觉还是不同.其实将java程序打包成exe也需要这个可执行jar文件. 准备: eclipse ...
- Advanced Installer 14.9 – WPF或winform应用程序打包成exe文件
Advanced Installer14.9 下载地址:https://pan.baidu.com/s/1uj2QcxWcpGdqsjAinNPIAw 提取码:sa3r 选择Visual Studi ...
- 使用exe4j把JAVA GUI程序打包成exe文件时遇到的问题
1.把项目打包成jar文件时,只要勾选src目录就行了,其他的比如资源文件和jar包是不能添加进去的. 2.在D盘建一个文件夹,最好与项目同名,然后把打包好的jar包放进去,其他资源文件(图片之类的) ...
- winform程序打包成exe文件
拿到一个实现功能的winform小程序,如何利用NSIS工具制作安装包? 1.NSIS工具下载地址 点我下载 2.启动NSIS工具,如图点击 3.选择"使用脚本向导创建新的脚本文件" ...
随机推荐
- 附006.harbor.cfg配置文件详解
一 必须参数 需要在配置文件中设置这些参数.如果用户更新它们harbor.cfg并运行install.sh脚本以重新安装Harbor,它们将生效. hostname:目标主机的主机名,用于访问UI和注 ...
- PHP反序列化与Session
0x00前言: php存储session有三种模式,php_serialize, php, binary 这里着重讨论php_serialize和php的不合理使用导致的安全问题 关于session的 ...
- 一种表达式语言的解析引擎JEXL简单使用
Jexl 是一个 Expression Language 的解析引擎, 是为了方便嵌入你的系统或者程序框架的开发中, 他算是实现了 JSTL 中 EL 的延伸版本. 不过也采用了一些 Velocity ...
- centos6安装openresty
1.安装依赖库 yum install readline-devel pcre-devel openssl-devel gcc 2.下载openresty wget --no-check-certif ...
- cout endl in c++
#include<iostream> using namespace std; int main() { cout<<endl; endl(cout); getchar(); ...
- IAR7.51提示秘钥无效IAR 以及 CCDebug驱动(包含win7 64bit)
今天IAR不识别我的仿真器,然后我感觉驱动有问题,就把之前的驱动卸载了,但是按照以前的方法按章驱动(选择路径到IAR的某个目录),提示找不到驱动... 也不想重新装个IAR了,于是到CSDN上下载了这 ...
- (转)JavaWeb学习之Servlet(一)----MyEclipse及Tomcat的配置
[声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4134921.html [开发环境] 物理机版本:Win 7旗舰版(64位 ...
- [BZOJ1899][ZJOI2004]Lunch 午餐 (DP)
比较水的DP 但是比较难想 整体思路还是很好理解的 在洛谷的题解里有一个一维的 > 什么时候去看一下 下面发我的代码 #include<bits/stdc++.h> #define ...
- JSP(1)—基础知识
JSP(1)-基本知识 起源 在很多动态网页中绝大多数网页都是固定不变的只有局部内容需要动态产生和改变,如果使用Servlet程序来输出只有局部内容需要动态改变的网页,其中所有的的静态内容,也需要程序 ...
- 问题9:tabtle 整理
合并“行”单元格: <th colspan="2">Telephone</th> 合并“列”单元格: <th rowspan="2" ...